我正在为代码使用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!
答案 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