是否有从JavaScript数组中删除项的方法?
给定一个数组:
var ary = ['three', 'seven', 'eleven'];
我想做的事情是:
removeItem('seven', ary);
我已经查看了splice(),但它只删除了位置号,而我需要一些东西来删除其值的项目。
是否有从JavaScript数组中删除项的方法?
给定一个数组:
var ary = ['three', 'seven', 'eleven'];
我想做的事情是:
removeItem('seven', ary);
我已经查看了splice(),但它只删除了位置号,而我需要一些东西来删除其值的项目。
当前回答
我使用了投票最多的选项,并创建了一个函数,该函数将使用另一个不需要的单词数组清理一个单词数组:
function cleanArrayOfSpecificTerms(array,unwantedTermsArray) {
$.each(unwantedTermsArray, function( index, value ) {
var index = array.indexOf(value);
if (index > -1) {
array.splice(index, 1);
}
});
return array;
}
要使用,请执行以下操作:
var notInclude = ['Not','No','First','Last','Prior','Next', 'dogs','cats'];
var splitTerms = ["call", "log", "dogs", "cats", "topic", "change", "pricing"];
cleanArrayOfSpecificTerms(splitTerms,notInclude)
其他回答
如果你有唯一的值,顺序不重要,使用Set,它有delete():
var mySet = new Set(['three', 'seven', 'eleven']);
mySet.delete('seven'); // Returns true, successfully removed
[...mySet]; // Returns ['three', 'eleven']
indexOf是一个选项,但它的实现基本上是在整个数组中搜索值,因此执行时间随着数组大小的增加而增加。(所以我猜每个浏览器都是这样,我只检查了Firefox)。
我没有IE6可以检查,但我敢打赌,你可以在几乎任何客户端机器上以这种方式每秒检查至少一百万个数组项。如果[数组大小]*[每秒搜索次数]可能超过一百万,您应该考虑不同的实现。
基本上你可以使用一个对象为你的数组创建一个索引,如下所示:
var index={'three':0, 'seven':1, 'eleven':2};
任何正常的JavaScript环境都会为这些对象创建一个可搜索的索引,这样无论对象有多少属性,您都可以快速地将键转换为值。
这只是基本的方法,根据你的需要,你可以组合几个对象和/或数组,使相同的数据快速搜索不同的属性。如果您指定了确切的需求,我可以建议更具体的数据结构。
一行代码就可以了,
var arr = ['three', 'seven', 'eleven'];
// Remove item 'seven' from array
var filteredArray = arr.filter(function(e) { return e !== 'seven' })
//=> ["three", "eleven"]
// In ECMA6 (arrow function syntax):
var filteredArray = arr.filter(e => e !== 'seven')
这就使用了JS中的filter函数。它在IE9及更高版本中得到支持。
它的功能(来自文档链接)
Filter()为数组中的每个元素调用一次所提供的回调函数,并构造一个包含所有回调返回强制为true的值的新数组。回调只对数组中已赋值的索引调用;对于已删除或从未赋值的索引,不调用该方法。未通过回调测试的数组元素将被跳过,并且不包含在新数组中。
基本上,这和所有其他for (var key in ary){…}解决方案,除了从IE6开始支持for in构造。
基本上,filter是一个方便的方法,与for in构造(AFAIK)相比,它看起来更好(并且是可链的)。
你可以用以下两种方法:
const arr = ['1', '2', '3', '4'] // we wanna delete number "3"
第一种方式: arr.indexOf (3) ! = = 1 & & arr.splice (arr.indexOf (3), 1) 第二种方式(ES6)特别无突变: const newArr = arr。过滤(e => e !== '3')
let arr = [5, 15, 25, 30, 35];
console.log(arr); //result [5, 15, 25, 30, 35]
let index = arr.indexOf(30);
if (index > -1) {
arr.splice(index, 1);
}
console.log(arr); //result [5, 15, 25, 35]