最有效的方法来过滤没有标准键的Javascript对象数组

时间:2014-10-02 09:22:15

标签: javascript jquery arrays

我们说我有这个(不可否认的)结构:

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)"中重构它。循环。

我的问题:过滤这种数组的最有效方法是什么?

编辑:忘了澄清我事先并不知道关键字符串。这用于外部循环,其中我要查找的关键字符串被传递下来。

2 个答案:

答案 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]。没有循环。

(当然,这假定所有键都不同)。