如何从数组中删除一个特定值? 类似 :

array.remove(value);

我必须使用核心核心核心JavaScript。 不允许框架 。


当前回答

不可改变和一班制方式:

const newArr = targetArr.filter(e => e !== elementToDelete);

其他回答

于2016年10月16日编辑

  • 做简单、直觉和直观的(a)项(b)项(b)目(c)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f):奥卡姆剃刀)
  • 执行不可更改( 原始数组保持不变)
  • 用标准的 JavaScript 函数执行, 如果您的浏览器不支持这些函数-使用多填

在此代码示例中,我使用array.filter(...)函数从数组中删除不想要的项目。此函数不改变原始数组,而创建一个新数组。如果浏览器不支持此函数(例如,在版本9之前的 Internet Explorerer 或1.5版本之前的Firefox),请考虑core-js.

删除项目( ECMA-262 版5 代码 AKA 旧风格 JavaScript)

var value = 3

var arr = [1, 2, 3, 4, 5, 3]

arr = arr.filter(function(item) {
    return item !== value
})

console.log(arr)
// [ 1, 2, 4, 5 ]

删除项目( ECMAScript 6 代码)

let value = 3

let arr = [1, 2, 3, 4, 5, 3]

arr = arr.filter(item => item !== value)

console.log(arr)
// [ 1, 2, 4, 5 ]

重要ECMAScript 6() => {}Internet Explorer 中不支持箭头函数语法,45版前的铬、22版前的Firefox和10版前的Safari 。 要在旧浏览器中使用 ECMAScript 6 语法巴比尔JS.


删除多个项目( ECMAScript 7 代码)

此方法的另一个好处是,您可以删除多个项

let forDeletion = [2, 3, 5]

let arr = [1, 2, 3, 4, 5, 3]

arr = arr.filter(item => !forDeletion.includes(item))
// !!! Read below about array.includes(...) support !!!

console.log(arr)
// [ 1, 4 ]

重要 array.includes(...)在互联网探索器、47版本前铬、43版本前Firefox、9版本前Safari、14版本前边缘中,完全不支持互联网探索器、47版本前铬、43版本前Firefox、9版本前Safari、14版本前边缘等功能,但您可以多元填充core-js.

删除多个项目( 未来, 也许)

如果"这个暗暗的语法"提案被接受过,你可以做到这一点:

// array-lib.js

export function remove(...forDeletion) {
    return this.filter(item => !forDeletion.includes(item))
}

// main.js

import { remove } from './array-lib.js'

let arr = [1, 2, 3, 4, 5, 3]

// :: This-Binding Syntax Proposal
// using "remove" function as "virtual method"
// without extending Array.prototype
arr = arr::remove(2, 3, 5)

console.log(arr)
// [ 1, 4 ]

尝试自己在 BabelJS :)

参考参考参考参考参考文献

Array.prototype.remove = function(x) {
    var y=this.slice(x+1);
    var z=[];
    for(i=0;i<=x-1;i++) {
        z[z.length] = this[i];
    }

    for(i=0;i<y.length;i++){
        z[z.length]=y[i];
    }

    return z;
}
    Array.prototype.remove = function(start, end) {
        var n = this.slice((end || start) + 1 || this.length);
        return this.length = start < 0 ? this.length + start : start,
        this.push.apply(this, n)
    }

startend可以是负数。在这种情况下,它们会从数组的末尾计数。

如果只有start中指定,只删除一个元素。

函数返回新数组长度。

z = [0,1,2,3,4,5,6,7,8,9];

newlength = z.remove(2,6);

(8) [0, 1, 7, 8, 9]

z=[0,1,2,3,4,5,6,7,8,9];

newlength = z.remove(-4,-2);

(7) [0, 1, 2, 3, 4, 5, 9]

z=[0,1,2,3,4,5,6,7,8,9];

newlength = z.remove(3,-2);

(4) [0, 1, 2, 9]

我本人也有这个问题(在更换阵列是可以接受的情况下),

var filteredItems = this.items.filter(function (i) {
    return i !== item;
});

要给上面的片段略加上下文:

self.thingWithItems = {
    items: [],
    removeItem: function (item) {
        var filteredItems = this.items.filter(function (i) {
            return i !== item;
        });

        this.items = filteredItems;
    }
};

此解决方案应该同时使用引用项和值项。 它都取决于您是否需要保持对原始数组的引用, 以判断该解决方案是否适用 。

我对基底 JavaScript 阵列进行了相当高效的扩展:

Array.prototype.drop = function(k) {
  var valueIndex = this.indexOf(k);
  while(valueIndex > -1) {
    this.removeAt(valueIndex);
    valueIndex = this.indexOf(k);
  }
};