使用自定义键创建对象数组

时间:2014-03-13 12:39:19

标签: javascript arrays object

目前,我有一个对象数组,如下所示:

var arr = [{
            id: UNIQUE_ID,
            title: 'TITLE'
          }, {
            id: UNIQUE_ID,
            title: 'TITLE'  
          }];

在这里困扰我的是,在特殊情况下,我必须遍历数组并显示匹配ID的数据。我想只获取该特定对象的所有内容,其中包含我想要的ID,以及它。如果阵列看起来更像这样,对我来说会容易得多:

var arr = [{
            id: {
              title: 'TITLE'
            },
            id: {
              title: 'TITLE'
            }
          }]

ID来自生成随机数的方法的结果,因此我需要为此id添加变量或方法调用。

我不确定这是可能的,因为我没有找到这方面的具体例子,但我也希望听到其他解决方案。

3 个答案:

答案 0 :(得分:7)

你可以通过完全删除数组,只使用一个对象来做到这一点:

var items = {};
items["some id"] = {title: 'first title'};
items["another id"] = {title: 'second title'};

或者如果你在变量中有密钥:

var key = "a third id";
items[key] = {title: 'third title'};

稍后,如果您想根据密钥查找其中一个条目:

var key = "another id";

你这样做:

console.log(items[key].title); // "second title" (if key is "another id")

如果您需要知道对象中的所有键是什么,可以使用Object.keys

var arrayOfKeys = Object.keys(obj);

(请注意,Object.keys是ES5功能;在较旧的浏览器中,您需要为其添加垫片,这很简单。)

请注意我在上面第一个代码块中填充对象的方式。如果您可以对密钥进行硬编码,则可以使用对象初始化程序执行此操作:

var items = {
    "some id":    {title: 'first title'},
    "another id": {title: 'second title'}
};

...但如果您想使用变量作为键名,则不能这样做,因为您无法将变量放在{{1的左侧(它看起来像一个文字键名)。也就是说,如果你有

:

然后这不会起作用:

var key = "a third id";

密钥为var items { key: {title: "third title"} // <==== Doesn't do what we want }; ,而不是"key"(就像我们一直使用的"a third id"密钥一样)。这就是为什么在上面的第一个块中,我创建了对象,然后再单独设置属性。

答案 1 :(得分:0)

您要求的远远是呼叫索引。您可以通过构建数据来轻松实现它:

var arr = {
        1: {
          title: 'TITLE'
        },
        2: {
          title: 'TITLE'
        }
      };

您甚至不必遍历现在索引的数组,因为每个条目都可以通过其索引访问:

var needle = array[id];

答案 2 :(得分:0)

在UnderscoreJs的帮助下:

var arr= [{
    id: '1',
    title: 40
}, {
    id: '2',
    title: 40
}, {
    id: '1',
    title: 60
}];
var res = _.groupBy(arr, function(x){ return x.id; });
res["1"];

结果:

[{
    id: '1',
    title: 40
}, {
    id: '1',
    title: 60
}]

http://jsbin.com/jifabuva/1/edit