如何遍历数组中的多个数组并从中筛选值

时间:2019-03-15 21:31:47

标签: javascript extjs

我正在为代码使用EXTJS框架。 下面是我的数组结构:

data = [{
  id: 22,
  rows: [{
    id: "673627",
    name: "ABS",
    address: "536street"
  }, {
    id: "333",
    name: "TEST$$",
    address: "536street"
  }, {
    id: "999",
    name: "TEST$$",
    address: "536street"
  }]

}, {
  id: 33,
  rows: [{
    id: "899",
    name: "TES",
    address: "536street"
  }, {
    id: "333",
    name: "TEST$$",
    address: "536street"
  }, {
    id: "999",
    name: "TES673",
    address: "536street"
  }]

}]

现在,我想从该数组中过滤名称,我正在将其值与“ TEST $$”进行比较。 我正在这样做;

Ext.each(data, function(item) {
  filter = item.rows.filter(function(name) {
    return name.name === "TEST$$";
  }, this);
}, this);
console.log(filter);

在这种情况下,它只返回1个匹配项,因为我对此特定值有3个匹配项。它从数据数组中的最后一项返回匹配项,因此我没有得到所有匹配的值,不知道如何循环查找所有匹配的值?

thx!

1 个答案:

答案 0 :(得分:2)

filter数组的每次迭代中,您正在重新分配 data变量:

filter = item.rows.filter(function(name) {
  return name.name === "TEST$$";
}, this);

在最后一次迭代中,只有一个匹配项,其中一个与id的{​​{1}}相匹配,因此这是您在运行333之后看到的唯一一个匹配项。尝试推送到不会被覆盖的外部数组:

Ext.each

请注意,无需传递const testItems = []; Ext.each(data, function(item) { const filtered = item.rows.filter(row => row.name === "TEST$$") testItems.push(...filtered); }); console.log(testItems); 上下文。

另一种选择是this首先将所有flatMap提取到单个数组:

rows