Javascript 如何循环一个数组中的多个数组并从中筛选值

Javascript 如何循环一个数组中的多个数组并从中筛选值,javascript,extjs,Javascript,Extjs,我的代码使用的是EXTJS框架。 下面是我的数组结构: data = [{ id: 22, rows: [{ id: "673627", name: "ABS", address: "536street" }, { id: "333", name: "TEST$$", address: "536street" }, { id: "999", name: "TEST$$", address: "536stree

我的代码使用的是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个匹配项。它返回数据数组中最后一项的匹配,因此我没有得到所有匹配的值,知道如何循环得到所有匹配的值吗

谢谢

您在
数据
数组的每次迭代中都重新分配
过滤器
变量:

filter = item.rows.filter(function(name) {
  return name.name === "TEST$$";
}, this);
在上一次迭代中,只有一个匹配项,即id为
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);
请注意,无需传递
上下文

另一个选项是
flatMap
,首先将所有
提取到单个数组:

const output = data
  .flatMap(({ rows }) => rows)
  .filter(({ name }) => name === 'TEST$$');
您在
数据
数组的每次迭代中都重新分配
过滤器
变量:

filter = item.rows.filter(function(name) {
  return name.name === "TEST$$";
}, this);
在上一次迭代中,只有一个匹配项,即id为
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);
请注意,无需传递
上下文

另一个选项是
flatMap
,首先将所有
提取到单个数组:

const output = data
  .flatMap(({ rows }) => rows)
  .filter(({ name }) => name === 'TEST$$');

每次通过循环时都会覆盖
过滤器
。循环完成后,变量将只包含最后一个值。将
console.log(过滤器)
放入循环中。
console.log(过滤器)
放入
EXT.each
loop;)或者将
filter
设置为一个数组,并使用
filter.push()
而不是
filter=
。您谈论返回,但此代码不返回任何内容,它只会打印到控制台。您想要得到的实际结果是什么?每次通过循环都会覆盖
filter
。循环完成后,变量将只包含最后一个值。将
console.log(过滤器)
放入循环中。
console.log(过滤器)
放入
EXT.each
loop;)或者将
filter
设置为一个数组,并使用
filter.push()
而不是
filter=
。您谈论的是返回,但此代码不返回任何内容,它只是打印到控制台。您想要得到的实际结果是什么?