我们说我有这个(不可否认的)结构:
var items = [
{SomeString: [value1,value2...]},
{AnotherString: [valueX,valueY...]},
{YetAnotherString: [valueA,valueB...]}
];
我想获取分配给" AnotherString"。
的数组我使用的一种方式(通过jQuery):
$.each(items,function(x,item){
$.each(item,function(key,values){
if(key=="AnotherString"){
//...do something
}
}
});
显然这是非常低效的,因为它循环通过不必要的物品。 一种方法是在" while(!found)"中重构它。循环。
我的问题:过滤这种数组的最有效方法是什么?
编辑:忘了澄清我事先并不知道关键字符串。这用于外部循环,其中我要查找的关键字符串被传递下来。
答案 0 :(得分:3)
有时,剥离jQuery并使用Vanilla JS是获得最有效解决方案的途径。
items.some(function(item) {
if( item.hasOwnProperty("AnotherString")) {
// do something with item["AnotherString"]
return true;
}
return false;
});
Documentation on the some
function - 提供了Polyfill
答案 1 :(得分:2)
如果你知道这种结构不好,你为什么坚持下去呢?只需使用普通对象:
var obj = {
SomeString: [value1,value2...],
AnotherString: [valueX,valueY...],
YetAnotherString: [valueA,valueB...]
};
如果出于某种原因无法做到这一点,请动态转换它:
obj = {};
items.forEach(function(item) {
var key = Object.keys(item)[0];
obj[key] = item[key];
});
这将返回如上所述的对象。完成后,只需在需要时obj[someKey]
。没有循环。
(当然,这假定所有键都不同)。