Differential between [] and {} for an associative array in Javascript

Implement a simple database now.

I think the duplicate tag for this question is a bad judge. The related question does nothing for my requirement.

The user ID refers to user data, and I have 2 options for doing this as follows: DB1or DB2,

var DB1 = {
    user: {}
};
var DB2 = {
    user: []
};

DB1.user['001'] = {
    email: 'name@email.com',
    name: 'ken'
};
DB2.user['001'] = {
    email: 'name@email.com',
    name: 'ken'
};

console.log(DB1.user['001']);
console.log(DB2.user['001']);

Both DB1 and DB2 behave exactly as expected, exactly the same, at least that seems to me.

Is there any difference? Is this just a way to express {} or []?

If the other is more effective?

Thanks for your thought.

UPDATE:

Many thanks to everyone who kindly gave me the answers in detail.

I probably understand in this case, the array [] for an associative manner is actually an object.

( ), , .

, , [] {}.

, , , , , . .

UPDATE2:

, , . :

var DB1 = {
    user:
    {}
};
var DB2 = {
    user: []
};
var DB3 = {
    user: []
};

for (var i = 0; i < 100000; i++)
{
    var id = ('0000' + i)
        .slice(-5);

    DB1.user[id] = {
        email: 'name@email.com',
        name: 'ken'
    };

    DB2.user[id] = {
        email: 'name@email.com',
        name: 'ken'
    };

    DB3.user[i] = {
        email: 'name@email.com',
        name: 'ken'
    };

}
//confirm the value just in case
console.log(DB1.user['00000']);
console.log(DB1.user['00001']);
console.log(DB1.user['99999']);
console.log(DB1.user['100000']);

for (var t = 0; t < 10; t++)
{
    console.log('-----------test ' + t);
    console.time('DB1');
    for (var i = 0; i < 100000; i++)
    {
        var id = ('0000' + i)
            .slice(-5);

        var data = DB1.user[id];
    }
    console.timeEnd('DB1');

    console.time('DB2');
    for (var i = 0; i < 100000; i++)
    {
        var id = ('0000' + i)
            .slice(-5);

        var data = DB2.user[id];
    }
    console.timeEnd('DB2');


    console.time('DB3');
    for (var i = 0; i < 100000; i++)
    {
        var id = ('0000' + i)
            .slice(-5);

        var id1 = id * 1;
        var data = DB3.user[id1];
    }
    console.timeEnd('DB3');
}

:

{ email: 'name@email.com', name: 'ken' }
{ email: 'name@email.com', name: 'ken' }
{ email: 'name@email.com', name: 'ken' }
undefined

-----------test 0
DB1: 46ms
DB2: 68ms
DB3: 28ms
-----------test 1
DB1: 39ms
DB2: 33ms
DB3: 26ms
-----------test 2
DB1: 32ms
DB2: 39ms
DB3: 25ms
-----------test 3
DB1: 57ms
DB2: 33ms
DB3: 27ms
-----------test 4
DB1: 39ms
DB2: 35ms
DB3: 27ms
-----------test 5
DB1: 39ms
DB2: 32ms
DB3: 27ms
-----------test 6
DB1: 33ms
DB2: 36ms
DB3: 26ms
-----------test 7
DB1: 39ms
DB2: 41ms
DB3: 40ms
-----------test 8
DB1: 32ms
DB2: 32ms
DB3: 28ms
-----------test 9
DB1: 36ms
DB2: 31ms
DB3: 28ms

100000 DB , , Objective DB .

+4
4

DB1 DB2 , , , , .

. [] , {} . JavaScript , . , , . , , ( , length, push, splice ..), [] , .

, . , . , , , '001'. ( .)

, :

DB1.user['001'] = ...;

. :

var a = [];
a['001'] = "foo";
console.log(a.length); // 0

"001", . :

a[1] = "foo";

a['1'] = "foo";

... :

var a = [];
a[1] = "foo";
console.log(a.length); // 2 (see below)

? , - . , , ( ) ( , , ). ( , 0 2 32 -2 ) - .


" ", JavaScript (, ):

var a = new Int32Array(10);

- , [].


. length 2?

var a = [];
a[1] = "foo";
console.log(a.length); // 2

JavaScript , , , , , , length , . , a , length 2.


: " " JavaScript, PHP , /. JavaScript "" ( ), "" "". , PHP.


, , , , , .

, , , , , , '001'. , , .

JavaScript "" - . . , - , JavaScript. , , , , ( , , , ).

+7

[] - ; new Array().

{} - ; new Object().

, ; .

+7
user: {}

,

user: []

. Object, ,

DB2.user['001'] = {..};

.

var myArray = [];
myArray["js"] = "awesome";
myArray.push("a");
myArray.push("b");
console.log(myArray);          // [ 'a', 'b', js: 'awesome' ]
+2

, . [] - , Array methods. {} - , .

, , , . .

If you need order, use Array [], otherwise use Object {}.

Performance test

var i = 10000;
console.time('arr');
while (i--) {
    ([]);
}
console.timeEnd('arr');


i = 10000;
console.time('obj');
while (i--) {
    ({});
}
console.timeEnd('obj');

result

arr: 10.527ms
obj: 8.974ms

0
source

All Articles