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

abp*_*kov 1 javascript arrays object

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

var arr = [{
            id: UNIQUE_ID,
            title: 'TITLE'
          }, {
            id: UNIQUE_ID,
            title: 'TITLE'  
          }];
Run Code Online (Sandbox Code Playgroud)

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

var arr = [{
            id: {
              title: 'TITLE'
            },
            id: {
              title: 'TITLE'
            }
          }]
Run Code Online (Sandbox Code Playgroud)

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

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

T.J*_*der 8

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

var items = {};
items["some id"] = {title: 'first title'};
items["another id"] = {title: 'second title'};
Run Code Online (Sandbox Code Playgroud)

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

var key = "a third id";
items[key] = {title: 'third title'};
Run Code Online (Sandbox Code Playgroud)

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

var key = "another id";
Run Code Online (Sandbox Code Playgroud)

你这样做:

console.log(items[key].title); // "second title" (if key is "another id")
Run Code Online (Sandbox Code Playgroud)

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

var arrayOfKeys = Object.keys(obj);
Run Code Online (Sandbox Code Playgroud)

(请注意,这Object.keys是一个ES5功能;在旧版浏览器中,您需要为它添加一个垫片,这是微不足道的.)

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

var items = {
    "some id":    {title: 'first title'},
    "another id": {title: 'second title'}
};
Run Code Online (Sandbox Code Playgroud)

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

var key = "a third id";
Run Code Online (Sandbox Code Playgroud)

那么这将不起作用:

var items {
    key: {title: "third title"} // <==== Doesn't do what we want
};
Run Code Online (Sandbox Code Playgroud)

关键是"key",不是"a third id"(就像title我们一直使用的那个键).这就是为什么在上面的第一个块中,我创建了对象,然后分别设置属性.