-1

假设我有这个数组

[{k:2, v:"Stack"}, {k:5, v:"Over"}, , {k:9, v:"flow"}]

如何选择值 <= 5 的所有键之类的元素?或奇数键上的前 2 个元素或所有值(拼写溢出)

我不想使用 for/foreach 循环。我正在寻找类似 jquery 的东西,我可以将一些东西应用于它匹配的所有内容。有点像这如何将 newclassproperty 应用于具有 group 类的 dom 的所有内部

$('.group a').addClass('newclassproperty')
4

4 回答 4

5

使用array.filter,您将看不到循环:

lessThan5 = array.filter(function (elem) {
    return elem.k <= 5;
});
于 2013-03-14T15:15:50.767 回答
2

根据您需要的浏览器支持,您可能正在寻找JavaScript 1.6 Array.filter 方法

var arr = [{k:2, v:"Stack"}, {k:5, v:"Over"}, , {k:9, v:"flow"}]
var odds = arr.filter(function(item, index) {
  return !(item.k % 2)
});
var small = arr.filter(function(item, index) {
  return item.k < 5
});
var first = arr.slice(0, 2);
于 2013-03-14T15:18:11.013 回答
1
$.each(result_data_array_from_json, function(key, value) {
      if(key <= 5){
             //your statements
      }
});
于 2013-03-14T15:18:31.217 回答
0

由于目前的性能原因,我建议使用普通循环并将其封装到自定义函数中(例如,通过扩展Array.prototype或使用您自己的包装函数)或使用 jQuery(=overkill)来完成此类任务。

var t = [{k:2, v:"Stack"}, {k:5, v:"Over"}, , {k:9, v:"flow"}];
var r = [];

r = t.filter(function (elem) {
    return elem.k <= 5;
});

对比

for (var i = 0, l = t.length;i<=l;i++){
   if(t[i] && t[i].k <= 5){r.push(t[i])}
}

请参阅具体案例的性能测试

于 2013-03-14T15:34:17.357 回答