【问题标题】:Using the delete operator使用删除运算符
【发布时间】:2020-06-21 15:10:46
【问题描述】:

我正在阅读在页面底部附近谈到的delete 一元运算符 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Unary)

它说从数组中删除一个项目将使项目undefined。但是,正如下面的代码所示,我们不能像使用具有显式值 undefined 作为其项之一的新数组那样循环此 undefined 项。

这只是一个怪癖还是这里有更多内容需要阅读?将删除的项目描述为undefined 似乎没有意义,因为它不像undefined 那样对待。

let a = [1, 2, 3];

console.log("untampered-with array:", a);

delete a[0];

console.log("array after first item deleted:", a);

a.forEach(element => {
    console.log("looping over each item and printing it:", element);
});

b = [undefined, 1, 2];

b.forEach(element => {
    console.log("looping over each item of array with undefined explicitly declared:", element);
});

还可能值得一提的是,在 Visual Studio Code 中,当我们在删除第一项后打印出 a 时,它不会将第一项显示为未定义(就像在 Stack Overflow 代码模拟器上一样)。它显示了这一点:

【问题讨论】:

  • 这里有问题吗?
  • 它在数组中创建了一个holeforEach 和其他数组方法跳过漏洞:stackoverflow.com/a/13847793/3082296
  • "trees[3] 被删除删除。但是,trees[3] 仍然是可寻址的并返回未定义" - 这不是很好地表达。 任何属性在javascript中无论是否存在都是可寻址的,不存在时返回undefined,这里数组没什么特别的。
  • Do not use delete on arrays。绝不。我将更新 MDN 以包含警告。

标签: javascript


【解决方案1】:

您可以使用拼接方法来删除数组项,而不是使用删除。

【讨论】:

    【解决方案2】:

    您可以使用 拼接

    let b = a.splice(0, 1)

    https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/splice

    过滤器

    let b = a.filter((item, i) => { return i !== 0 })

    https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/filter

    在这两种情况下,b 都是一个没有索引为 0 的项的新数组。

    【讨论】:

      猜你喜欢
      • 2013-05-24
      • 2019-03-09
      • 2016-05-25
      • 2016-12-29
      • 2015-02-14
      • 2017-03-29
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      相关资源
      最近更新 更多