我试图在一个对象内的数组中拼接parcel
的所有匹配项。
名为documents
的对象数组的示例:
[
{name: "first", content: ["1", "2", "1", "3"]},
{name: "second", content: ["2", "1", "1", "1"]},
{name: "third", content: ["4", "1", "3", "2"]},
]
parcel = 1
,并尝试接合1
的所有实体。
这是我目前掌握的情况:
console.log(parcel);
const parcel = 1;
console.log("doc start", documents);
for (i of documents) {
// get index by count
let count = -1;
for (j of i.content) {
count = count + 1;
console.log(j);
if (j == parcel) {
i.content.splice(count, 1);
}
}
}
console.log("doc end", documents);
以下是控制台记录的不同阵列示例:
parcel 1
doc start [
{
title: '1',
content: [
'1', '2', '2',
'3', '1', '1',
'2', '3'
]
}
]
1
2
3
1
2
3
doc end [ { title: '1', content: [ '2', '2', '3', '1', '2', '3' ] } ]
您可以看到,j
似乎并没有遍历整个i.content
,这意味着if
语句没有运行来拼接所有正确的项。
控制台日志的最终结果应该是:
doc start [{title: '1', content: [ '2', '2', '3', '2', '3' ]}]
我不知道为什么会这样...
2条答案
按热度按时间mcdcgff01#
map
和filter
的工作原理如下:对于迭代中的每个对象,使用spread syntax创建一个新对象,并通过从现有数组中过滤掉所有1
创建一个新的内容数组。carvr3hs2#
由于您只想按内容过滤,因此应使用
map
和filter
内置数组方法