【问题标题】:How can I remove items from an array having met specific conditions using splice?如何使用拼接从满足特定条件的数组中删除项目?
【发布时间】:2022-11-30 05:41:49
【问题描述】:

我正在研究我认为是一个简单的算法:

任务:查看给定的数组,只取偶数并将它们乘以 2。要注意的是修改数组的位置而不是创建新数组。

我需要循环/映射一个数组,找出哪些数字是偶数:

我走到这一步:

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

arr.forEach((x, y) => {
        if (x % 2 !== 0) {
           // I would like to splice those numbers, 
           // but can't figure out how to do it?
        } 
    })

同样,catch 正在修改原始数组,返回 4、8、12、16 和 20。

【问题讨论】:

  • 你真的需要拼接吗?从最后循环怎么样?
  • 是的,我很抱歉,我的意思是偶数,可以被 2 整除。基本上,当我可以创建一个新数组时,我很容易就能解决这个问题。我只是通过它映射,然后使用 if (x % 2 === 0) newArray.push(x *2)。我基本上需要在这里做同样的事情,但我无法创建一个新数组来执行此操作。
  • 我不一定需要使用拼接,这正是我想到的。我想我必须使用拼接,因为我需要修改原始数组。

标签: javascript arrays splice


【解决方案1】:

这会是你的想法吗?

const arr=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];

for (let i=arr.length-1;i>=0;i--)
  if(arr[i]%4>0) arr.splice(i,1)
console.log(arr);

当你想从你正在循环的数组中删除元素时,重要的是你从末尾开始并一直向下到 0 因为向前你会在你删除一个元素后立即跳过一个元素。

【讨论】:

  • 我的数组最多只有 10 个,而不是 20 个?我不能修改它的长度。
  • 如果您不在循环中乘法并且最多只达到 10,您如何期望获得值最多为 20 的结果向量?
  • OP 希望从数组中返回所有偶数乘以 2 的外观。
  • :D 这很容易。完成...
【解决方案2】:

在我看来,这不是一个好方法,但如果您坚持修改现有数组而不创建新数组,那么这应该可以完成工作:

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

let [i, len] = [0, arr.length];
while (i < arr.length) {
    if (arr[i] % 2 === 0) {
        arr[i] *= 2;
    } else {
        arr.splice(i, 1);
        i--;
    }
    i++;
}

console.log(arr.join(", "));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 2023-01-19
    相关资源
    最近更新 更多