编程题:移除数组中的元素(JS实现)

一、要求直接在原数组上操作

题目描述:移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回。

输入:[1, 2, 2, 3, 4, 2, 2], 2
输出:[1, 3, 4]

方法1:

正向遍历数组,当数组元素的值与 item 相等时,就使用 splice 方法将其去除,但是要注意下标值的问题,去除一个数组元素后,下标值要减1,这样才能遍历到所有的元素。

function removeWithoutCopy(arr, item) {
    
    
  for (let i = 0; i < arr.length; i++) {
    
    
    if (arr[i] === item) {
    
    
      arr.splice(i, 1);
      i--; // 注意这里
    }
  }
  return arr;
}

方法2:

反向遍历数组,当数组元素的值与 item 相等时,就使用 splice 方法将其去除。和正向遍历不同的是,这里没有下标值错乱的问题。

function removeWithoutCopy(arr, item) {
    
    
  for (let i = arr.length - 1;i >= 0;i--) {
    
    
    if (arr[i] === item) {
    
    
      arr.splice(i, 1);
    }
  }
  return arr;
}

方法3:

使用 while 循环

function removeWithoutCopy(arr, item) {
    
    
  while (arr.indexOf(item) !== -1) {
    
    
    arr.splice(arr.indexOf(item), 1);
  }
  return arr;
}

二、 要求不能直接修改数组 arr,结果返回新的数组

题目描述:移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组。

输入:[1, 2, 2, 3, 4, 2, 2], 2
输出:[1, 3, 4]

方法1:

使用 filter 方法

function remove(arr, item) {
    
    
  return arr.filter(num => {
    
    
    return num !== item;
  })
}

方法2:

使用普通的 for 循环或者 forEach 或者 for of,将和 item 不相等的元素放入一个新的数组中。

function remove2(arr, item) {
    
    
  let result = [];

  // for (let i = 0; i < arr.length; i++) {
    
    
  //   if (arr[i] !== item) {
    
    
  //     result.push(arr[i]);
  //   }
  // }

  // arr.forEach(num => {
    
    
  //   if (num !== item) {
    
    
  //     result.push(num);
  //   }
  // });

  for (let num of arr) {
    
    
    if (num !== item) {
    
    
      result.push(num);
    }
  }
  return result;
}

方法3:

先使用 set 把原数组去重,这样数组中只剩下一个item了,再找到item的下标,使用splice去除。

function remove3(arr ,item) {
    
    
 let result = [...new Set(arr)];
 result.splice(result.indexOf(item),1);
 return result;
}

前端学习交流QQ群,群内学习讨论的氛围很好,大佬云集,期待您的加入:862748629 点击加入

猜你喜欢

转载自blog.csdn.net/weixin_43974265/article/details/114901068