我想通过pop()方法删除复制数组的负元素,但它只删除数组的最后一个元素。有人知道问题在哪里吗?代码在image
中
我试过:
const scores = [128, 0, -8, 50, 2, 3];
const betterScores = Array.from(scores);
for (const s of betterScores) {
if (s < 0) {
betterScores.pop(s);
}
}
console.log(betterScores);
我想得到betterScores = [128,50,2,3]
,但我得到了[128,0,-8,50,2]
。
6条答案
按热度按时间piok6c0g1#
使用
filter
代替for loop
:iibxawm42#
pop方法不需要任何参数,它自动删除数组的最后一个元素。要删除索引处的元素,可以使用splice方法。
因此,要删除索引处的一个元素,您可以使用splice(n,1),其中n是要删除的元素的索引,1是元素的计数(对于您的情况,您可以将第二个参数默认为1,并只给予正确的索引。此外,要访问索引for of循环将不起作用。使用basic for循环或forEach访问索引
xlpyo6sf3#
你可以很容易地在javascript中使用filter。
试试这个:
过滤方法文档:Filter Method
2guxujil4#
正如其他用户评论的那样,
filter
是解决这个问题的最佳方法。要回答关于为什么 * 你的 * 代码不工作的具体问题:
The
pop()
method删除数组中的最后一个元素并返回该元素。此方法更改数组的长度。(我强调)如果你真的想使用循环来删除元素,你可以使用一个简单的
for
循环和splice
元素从一个特定的索引。但由于数组的长度变短,当你删除元素时,通常最好从数组的末尾开始,然后向开始迭代。isr3a4wc5#
我敢肯定你不知道弹出数组的方法,它弹出数组的最后一个元素。如果你的任务是只得到正数,那么使用过滤器将是更好的解决方案
但是如果你的任务是使用一些方法来手动删除数组中的元素,你可以使用splice方法,类似这样
ao218c7q6#
你可以试试这个代码: