目前,我有一个对象数组,如下所示:
var arr = [{
id: UNIQUE_ID,
title: 'TITLE'
}, {
id: UNIQUE_ID,
title: 'TITLE'
}];
在这里困扰我的是,在特殊情况下,我必须遍历数组并显示匹配ID的数据。我想只获取该特定对象的所有内容,其中包含我想要的ID,以及它。如果阵列看起来更像这样,对我来说会容易得多:
var arr = [{
id: {
title: 'TITLE'
},
id: {
title: 'TITLE'
}
}]
ID来自生成随机数的方法的结果,因此我需要为此id添加变量或方法调用。
我不确定这是可能的,因为我没有找到这方面的具体例子,但我也希望听到其他解决方案。
答案 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
}]