首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >splice()没有清空数组。

splice()没有清空数组。
EN

Stack Overflow用户
提问于 2022-01-24 04:49:21
回答 2查看 74关注 0票数 0

下面的代码应该返回空数组,但它正在返回Banana、Banana、Banana

代码语言:javascript
复制
const fruits = ["Banana", "Banana", "Banana", "Banana", "Banana", "Banana"];

fruits.map((ele) => {
  if (ele === "Banana") {
    fruits.splice(0, 1)
  }
})

document.getElementById("demo").innerHTML = fruits;
代码语言:javascript
复制
<div id="demo"></div>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-24 05:00:17

这实际上是在做你说的。

array.map的实现可以如下所示:

代码语言:javascript
复制
array.prototype.map = function(transform) {
    let output = [];
    for(let index = 0; index < this.length; ++index) {
          output.push(transform(this[index]));
    }
    return output;
}

循环将是这样的:

  • Index = 0, length = 6, remove first item
  • Index = 1, length = 5, remove first remaining item
  • Index = 2, length = 4, remove first remaining item
  • Index = 3, length = 3, terminate loop

这就是为什么它只删除了三个项目。

这样做的结果是,array.map是不适合这项工作的函数。

有很多方法可以实现这一点。一种方法是向后遍历数组:

代码语言:javascript
复制
for(let index = fruits.length-1; index >= 0; --index) {
    if(fruits[index] === 'Banana') {
        fruits.splice(index, 1);
    }
}

举个例子:

代码语言:javascript
复制
const fruits = ["Banana", "Apple", "Banana", "Banana", "Orange", "Banana"];

for(let index = fruits.length-1; index >= 0; --index) {
    if(fruits[index] === 'Banana') {
        fruits.splice(index, 1);
    }
}

console.log(fruits);
代码语言:javascript
复制
<div class="demo"></div>

票数 1
EN

Stack Overflow用户

发布于 2022-01-24 07:59:16

.forEach()朝着一个前进的方向前进。因此,如果一个元素被移除,那么当长度减少到长度的一半时,索引引用将大于长度--因此数组的一半保持不变。

当减少数组的长度时,按旋转方向前进(例如。5...0)。下面的示例使用反向for循环和.splice(i, 1)

代码语言:javascript
复制
const fruits = ["Banana", "Banana", "Banana", "Banana", "Banana", "Banana"];

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

console.log(fruits);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70829137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档