Javascript 如何循环一个数组中的多个数组并从中筛选值
我的代码使用的是EXTJS框架。 下面是我的数组结构: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
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=
。您谈论的是返回,但此代码不返回任何内容,它只是打印到控制台。您想要得到的实际结果是什么?