如何最方便地从数组中删除所有匹配特定字符串的元素?例如:
array = [1,2,'deleted',4,5,'deleted',6,7];
我想从数组中删除所有的'deleted'
。
如何最方便地从数组中删除所有匹配特定字符串的元素?例如:
array = [1,2,'deleted',4,5,'deleted',6,7];
我想从数组中删除所有的'deleted'
。
可以简单地使用 Array.prototype.filter() 方法来获取符合条件的元素。
var array = [1,2,'deleted',4,5,'deleted',6,7];
var newarr = array.filter(function(a){return a !== 'deleted'})
let array = [1,2,'deleted',4,5,'deleted',6,7]
let newarr = array.filter(a => a !== 'deleted')
如果您有多个字符串需要从主数组中移除,您可以尝试这个方法
// Your main array
var arr = [ '8','abc','b','c'];
// This array contains strings that needs to be removed from main array
var removeStr = [ 'abc' , '8'];
arr = arr.filter(function(val){
return (removeStr.indexOf(val) == -1 ? true : false)
})
console.log(arr);
// 'arr' Outputs to :
[ 'b', 'c' ]
或者
更好的性能(使用哈希),如果不需要严格类型相等性
// Your main array
var arr = [ '8','deleted','b','c'];
// This array contains strings that needs to be removed from main array
var removeStr = [ 'deleted' , '8'];
var removeObj = {}; // Use of hash will boost performance for larger arrays
removeStr.forEach( e => removeObj[e] = true);
var res = arr.filter(function(val){
return !removeObj[val]
})
console.log(res);
// 'arr' Outputs to :
[ 'b', 'c' ]
如果您想要相同的数组,可以使用:
var array = [1,2,'deleted',4,5,'deleted',6,7];
var index = "deleted";
for(var i = array.length - 1; i >= 0; i--) {
if(array[i] === index) {
array.splice(i, 1);
}
}
否则,您可以使用Array.prototype.filter
,它将创建一个新数组,并包含所有通过所提供函数实现的测试的元素。
var arrayVal = [1,2,'deleted',4,5,'deleted',6,7];
function filterVal(value) {
return value !== 'deleted';
}
var filtered = arrayVal.filter(filterVal);
array = array.filter(function(s) {
return s !== 'deleted';
});
[10, 'deleted', 20, 'deleted'].filter(x => x !== 'deleted');
//=> [10, 20]
[2, 3, 2, 3].filter(x => x === 2);
[2, 3, 2, 3].filter(x => x !== 2);
[2, 3, 2, 3].filter(x => x === 2);
[2, 3, 2, 3].reject(x => x === 2);
x => x === 2
中有很多的“机制”:一个函数表达式,一个参数和一个等式检查。const eq =
x => y =>
x === y;
[2, 3, 2, 3].filter(eq(2));
//=> [2, 2]
eq(2)
与x => x === 2
相同,只是更短,并添加了语义。reject
函数并使用eq
:const reject =
(pred, xs) =>
xs.filter(x =>
pred(x) === false);
reject(eq(2), [2, 3, 2, 3]);
//=> [3, 3]
但是如果我们需要拒绝其他东西呢?那么我们可以构建一个使用 eq
的 either
函数:
const either =
(...xs) => y =>
xs.some(eq(y));
reject(either(1, 2), [1, 3, 2, 3]);
//=> [3, 3]
reject(eq('deleted'), [1, 'deleted', 3]);
//=> [1, 3]
reject(either('deleted', 'removed'), [1, 'deleted', 3, 'removed', 5]);
//=> [1, 3, 5]
让我们构建一个名为eitherfn
的函数,它接受一个谓词列表:
const eitherfn =
(...fn) => y =>
fn.some(f =>
f(y));
match
函数:const match =
x => y =>
typeof y === 'string'
? y.includes(x)
: false;
然后:
reject(eitherfn(match('delete'), eq(0)), [0, 1, 'deleted', 3, 'will delete', 5])
// [1, 3, 5]
array.filter(a => a !== 'deleted');
的意思是过滤掉数组中所有值为'deleted'的元素。 - Sterling Archer[1, 2, 'delete', 4, 5, 'deleted', 6, 'will delete']
,您该如何操作?如果您想要删除任何与字符串“del”甚至部分匹配的元素,那么“delete”,“deleted”和“will delete”都将被删除,您该怎么做? - user1837608