我有这个对象数组:
var buArray = [{'31': {'1':'VN', '2':'AC'}},
{'33': {'1':'VN', '2':'AC'}},
{'51': {'1':'VN', '2':'AC', '3':'SR', '5':'WIN'}},
{'52': {'1':'VN', '2':'AC', '3':'SR', '4':'JU'}},
{'53': {'1':'VN', '2':'AC', '3':'SR', '5':'WIN'}},
{'54': {'1':'VN', '2':'AC', '3':'SR', '5':'WIN'}},
{'55': {'1':'VN', '2':'AC', '3':'SR', '6':'PP'}}]
如何访问此特定对象(ID为31),例如:“{'31':{'1':'VN','2':'AC'}}”?
最诚挚的问候,
答案 0 :(得分:1)
您可以使用.filter
查找数组中的匹配元素:
function findEntry(a, key) {
return a.filter(function(e) {
var k = Object.keys(e);
return k.length === 1 && k[0] === key;
});
}
结果仍然是一个数组,但它只包含与谓词匹配的元素。
如果内部对象可能包含多个键,则将return
行替换为:
return k.indexOf('31') >= 0;
注意:Object.keys
,.filter
和.indexOf
是ES5功能。 Shims随时可用于旧浏览器。
答案 1 :(得分:0)
在标准的javascript中,你必须遍历每个项目并检查密钥。
function find_object_with_key(arr, key) {
for(var i = 0;i < arr.length;i++) { // For each index in the array
var item = arr[i]; // Retrieve the item
for(k in item) { // For each key in the object
if(!item.hasOwnProperty(k)) { // Check if the item is a proper member of the object
continue;
}
if(k == key) { // Check if the key matches what we are searching for
return item; // Return the item
}
}
}
return false; // In case of failure return false
}
答案 2 :(得分:0)
如果您使用的是underscore.js,则可以使用它具有的_.where(list, properties)
函数,而不是重新发明该机制。您可以在此处阅读:http://underscorejs.org/#where
答案 3 :(得分:0)
这是一个非常令人困惑的数据结构。目前没有任何对象具有id
属性,因此您无法对其进行查找 - 编写具有属性的对象为31,33,51的方式你必须编写一个自定义函数来搜索任何对象。
如果可以,我建议将数组中的每个对象重新设置为
{
id: 31,
data: {
'1':'VN',
'2':'AC'
}
}
但如果没有,用写的数据,就像下面这样的函数(使用简单的迭代,有更有效的方法)
function findObj(objID, array){
var i, j, len1, len2;
for(i = 0, len1 = array.length; i < len1; i++){
var keys = Object.keys(array[i]);
for(j = 0, len2 = keys.length; j < len2; j++){
if(keys[j] === objID) {
return array[i];
}
}
}
// object hasn't been found
return null;
}
然后调用它
findObj("31", buArray);