【问题标题】:splice() Method does not remove a specific element from My Arraysplice() 方法不会从我的数组中删除特定元素
【发布时间】:2022-08-03 15:42:17
【问题描述】:

我有这个代码:

let mix = [1, 2, 3, \"E\", 4, \"l\", \"z\", \"e\", \"r\", 5, \"o\"];

let newMix = mix.map(function (ele, index) {
    if (typeof ele === \"number\") {
        mix.splice(index, 1)
    }
})

console.log(mix);

输出如下:

[2, \'l\', \'z\', \'e\', \'r\', \'o\']

我的问题是:为什么没有splice() 删除元素 2

  • 因为您正在修改数组,同时仍然使用原始索引循环遍历它。当遇到数字2 时,映射循环将位于索引1,但该点的数组已经被修改,并且在该位置将对应元素3

标签: javascript


【解决方案1】:

拼接时,索引正在发生变化。我相信这里你想要的收集操作是filter而不是map

let mix = [1, 2, 3, "E", 4, "l", "z", "e", "r", 5, "o"];

mix = mix.filter(x => typeof x != "number");

console.log(mix);

【讨论】:

    【解决方案2】:

    因为,当您拼接 mix 数组时,索引正在被修改。

    您可以改用过滤器

    let newMix = mix.filter(function(elem){ 
     return typeof elem !== "number"
    })
    console.log(newMix)
    

    【讨论】:

      【解决方案3】:

      你想filter数组

      let mix = [1, 2, 3, "E", 4, "l", "z", "e", "r", 5, "o"];
      
      let newMix = mix.filter(function (ele, index) {
          return (typeof ele !== "number") 
        
          
      })
      
      console.log(newMix);

      【讨论】:

        猜你喜欢
        • 2021-09-23
        • 1970-01-01
        • 1970-01-01
        • 2021-06-18
        • 2014-07-30
        • 2021-09-02
        • 1970-01-01
        • 2019-06-03
        相关资源
        最近更新 更多