我试图根据另一个数组中不存在的索引从数组中删除一个单词,但我在使用拼接和过滤方法时观察到了奇怪的行为.
有人能解释一下下面的情况吗?Why is it happening like this in both cases, even though the same object is being altered on iteration?
Words
['one', 'two', 'three', 'four', 'five', 'six', 'seven']
Removable Words
['four', 'two', 'eight']
let words = ['one', 'two', 'three', 'four', 'five', 'six', 'seven'];
let removedWords = ['four', 'two', 'eight'];
words.forEach((word) => {
console.log(word);
if (removedWords.includes(word)) {
words = words.filter((removableWord) => removableWord !== word)
}
});
/* Output */
//one
//two
//three
//four
//five
//six
//seven
let words = ['one', 'two', 'three', 'four', 'five', 'six', 'seven'];
let removedWords = ['four', 'two', 'eight'];
words.forEach((word, index) => {
console.log(word);
if (removedWords.includes(word)) {
words.splice(index, 1);
}
});
/* Output */
//one
//two
//four
//six
//seven
如本Mozila document-forEach() does not make a copy of the array before iterating.中所述,在过滤并分配回原始对象后,它的行为不应该与拼接相同吗?
Note:除此之外,拼接方法对原始数组进行更改,过滤方法创建数组的新副本,并且不改变原始数组,但在给定示例中(过滤后),结果被分配回原始array.