【问题标题】:Filtering a JavaScript array [duplicate]过滤 JavaScript 数组 [重复]
【发布时间】:2013-12-08 22:24:41
【问题描述】:

我正在寻找一种方法来过滤我的 JavaScript Array() columns,其中 parentId 等于传递给方法的变量。

// Array decleration
var columns = []; // Columns
//...
for (var i1 in columns) {
  if (columns[i1].parentId == listItem) {
  //...

谁能推荐最简单的方法来使用纯 JavaScript 或 jQuery 来过滤它,以避免使用上面显示的 if 语句?

【问题讨论】:

标签: javascript jquery


【解决方案1】:
var filteredColumns = columns.filter(function(column) {
    return column.parentId == listItem;
});

【讨论】:

  • 有时,用户可能还需要一些关于元素索引的信息。有没有 jQuery grep 的纯 JS 等价物?
  • @Cupidvogel:如果你检查callback signature,你会在第二个参数中找到索引
  • 回调在这里只接受一个参数,列,对吧?
  • @Cupidvogel:不是。请先查看文档以了解与 RTFM 类似的问题。谢谢。
  • @Cupidvogel:文档中的相关部分:"callback 使用三个参数调用:(1) 元素的值,(2) 元素的索引,(3 ) 被遍历的 Array 对象"
【解决方案2】:
array = [1,2,3,4,5];
result = $.grep(array, function(n,i) {
   return n > 3;
});

这将返回结果大于 3 的过滤元素数组。这里n 是考虑的元素,i 是元素的索引。因此,根据您的要求,代码可以这样运行:

resultArray = $.grep(columns,function(n,i) {
   return n == parentId;
});

【讨论】:

    【解决方案3】:

    使用ES5 Array's filter method:

    var filtered = columns.filter(function (item) {
      return item.parentId === listItem
    });
    

    在上面的链接中,还有一个适用于旧浏览器的 shim。

    您也可以手动操作:

    var filtered = [];
    
    for (var i = 0, item; item = columns[i++];)
      if (item.parentId === listItem) filtered.push(item);
    

    Don't use for…in to iterate over Array.

    【讨论】:

      猜你喜欢
      • 2017-07-19
      • 1970-01-01
      • 2017-03-25
      • 2018-01-18
      • 2020-02-21
      • 2018-07-17
      • 2021-04-24
      • 1970-01-01
      • 2018-12-07
      相关资源
      最近更新 更多