javascript JS Pop()在for循环中无法正常工作

lg40wkob  于 2023-04-10  发布在  Java
关注(0)|答案(6)|浏览(180)

我想通过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]

piok6c0g

piok6c0g1#

使用filter代替for loop

const betterScores = scores.filter(s => s > 0);
iibxawm4

iibxawm42#

pop方法不需要任何参数,它自动删除数组的最后一个元素。要删除索引处的元素,可以使用splice方法。

const arrayOfNumbers = [1, 2, 3, 4];

arrayOfNumbers.splice(1, 1);

console.log(arrayOfNumbers); // [1, 3, 4]

因此,要删除索引处的一个元素,您可以使用splice(n,1),其中n是要删除的元素的索引,1是元素的计数(对于您的情况,您可以将第二个参数默认为1,并只给予正确的索引。此外,要访问索引for of循环将不起作用。使用basic for循环或forEach访问索引

xlpyo6sf

xlpyo6sf3#

你可以很容易地在javascript中使用filter。
试试这个:
过滤方法文档:Filter Method

const scores = [128, 0, -8, 50, 2, 3];
const betterScores = Array.from(scores);

const result = betterScores.filter(item => item > 0);

console.log(result);
2guxujil

2guxujil4#

正如其他用户评论的那样,filter是解决这个问题的最佳方法。
要回答关于为什么 * 你的 * 代码不工作的具体问题:
The pop() method删除数组中的最后一个元素并返回该元素。此方法更改数组的长度。(我强调)
如果你真的想使用循环来删除元素,你可以使用一个简单的for循环和splice元素从一个特定的索引。但由于数组的长度变短,当你删除元素时,通常最好从数组的末尾开始,然后向开始迭代。

const scores = [128, 0, -8, 50, 2, 3];

for (let i = scores.length - 1; i >= 0; --i) {
  if (scores[i] <= 0) {
    scores.splice(i, 1);
  }
}

console.log(scores);
isr3a4wc

isr3a4wc5#

我敢肯定你不知道弹出数组的方法,它弹出数组的最后一个元素。如果你的任务是只得到正数,那么使用过滤器将是更好的解决方案

const scores = [128, 0, -8, 50, 2, 3];
const result = scores.filter(item => item >= 0);

console.log(result);

但是如果你的任务是使用一些方法来手动删除数组中的元素,你可以使用splice方法,类似这样

const scores = [128,0,-8,50,2,3];
const betterScores = Array.from(scores);

for(const s in betterScores){
    if(betterScores[s] < 0){
  betterScores.splice(s,1);
    }
}
console.log(betterScores);
ao218c7q

ao218c7q6#

你可以试试这个代码:

const scores = [128, 0, -8, 50, 2, 3];
const betterScores = Array.from(scores);

for (const s of betterScores) {
  if (s < 0) {
    betterScores.splice(betterScores.indexOf(s), 1)
  }
}

相关问题