通过推送变量创建对象数组?

时间:2014-05-25 21:32:31

标签: javascript

我正在尝试创建像

这样的东西
var[1] = {object1, object2};
var[2] = {object1, object3);

或类似的东西,以便我可以遍历每个结果并获得与该键相关联的所有对象。问题是我要么是真的尝试过,要么是因为我似乎无法弄清楚如何做到这一点。

在PHP中我会做类似

的事情
$var[$object['id']][] = object1;
$var[$object['id']][] = object2;

如何在Javascript中执行类似的操作?

我有一个对象元素列表,它们有一个名为id的键值,我想用ID来组织它们。基本上...

[0] = { id: 2 },
[1] = { id: 3 },
[2] = { id: 2 },
[3] = { id: 3 }

我希望让它们井然有序,就像

一样
[0] = { { id: 2 }, { id: 2 } }
[1] = { { id: 3 }, { id: 3} }

3 个答案:

答案 0 :(得分:2)

var indexedArray = [];

for(var key in myObjects) {

    var myObject = myObjects[key];

    if(typeof(indexedArray[myObject.id]) === 'undefined') {
        indexedArray[myObject.id] = [myObject];
    }
    else {
        indexedArray[myObject.id].push(myObject);
    }
}

console.log(indexedArray);

http://jsfiddle.net/2fr4k/

答案 1 :(得分:1)

数组由方括号定义:

var myArray = [{ "id": 2 }, { "id": 3 }];

你所拥有的不是有效的语法。

答案 2 :(得分:0)

使用ECMA5方法,你可以这样做。

的Javascript

var d1 = [{
        id: 2
    }, {
        id: 3
    }, {
        id: 2
    }, {
        id: 3
    }],
    d2;


d2 = d1.reduce(function (acc, ele) {
    var id = ele.id;

    if (!acc[id]) {
        acc[id] = [];
    }

    acc[id].push(ele);

    return acc;
}, {});

d2 = Object.keys(d2).map(function (key) {
    return this[key];
}, d2);

console.log(JSON.stringify(d2));

输出

[[{"id":2},{"id":2}],[{"id":3},{"id":3}]] 

jsFiddle