我正在寻找一种有效的方法,从一个javascript数组中删除所有元素,如果它们存在于另一个数组中。
// If I have this array:
var myArray = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
// and this one:
var toRemove = ['b', 'c', 'g'];
我想对myArray进行操作,使其保持这种状态:['a','d','e','f']
使用jQuery,我使用grep()
和inArray()
,效果很好:
myArray = $.grep(myArray, function(value) {
return $.inArray(value, toRemove) < 0;
});
有没有一种纯javascript的方法可以做到这一点,而不需要循环和拼接?
filter
方法应该可以实现以下功能:
const myArray = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
const toRemove = ['b', 'c', 'g'];
// ES5 syntax
const filteredArray = myArray.filter(function(x) {
return toRemove.indexOf(x) < 0;
});
如果您的toRemove
数组很大,这种查找模式可能效率很低。创建一个映射,使查找为O(1)而不是O(n)。
const toRemoveMap = toRemove.reduce(
function(memo, item) {
memo[item] = memo[item] || true;
return memo;
},
{} // initialize an empty object
);
const filteredArray = myArray.filter(function (x) {
return toRemoveMap[x];
});
// or, if you want to use ES6-style arrow syntax:
const toRemoveMap = toRemove.reduce((memo, item) => ({
...memo,
[item]: true
}), {});
const filteredArray = myArray.filter(x => toRemoveMap[x]);
ECMAScript 6集合可以更快地计算一个数组中不在另一个数组中的元素:
const myArray = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
const toRemove = new Set(['b', 'c', 'g']);
const difference = myArray.filter( x => !toRemove.has(x) );
console.log(difference); // ["a", "d", "e", "f"]
使用Array.filter()
方法:
myArray = myArray.filter( function( el ) {
return toRemove.indexOf( el ) < 0;
} );
小改进,因为浏览器对Array.includes()
的支持增加了:
myArray = myArray.filter( function( el ) {
return !toRemove.includes( el );
} );
使用箭头功能的下一个自适应:
myArray = myArray.filter( ( el ) => !toRemove.includes( el ) );
问题内容: 我正在寻找一种有效的方法来从javascript数组中删除所有元素(如果它们存在于另一个数组中)。 我想对myArray进行操作以使其保持这种状态: 使用jQuery,我使用和,效果很好: 有没有一种纯Javascript方式无需循环和拼接的方法? 问题答案: 使用方法: 小改进,因为对浏览器的支持增加了: 使用arrow functions:下一个适应:
问题内容: 我试图遍历2个数组,外部数组则比另一个数组更长。它将循环遍历第一个,如果第二个数组不包含该int,它将返回false。但是我不知道该怎么做。这是我到目前为止所拥有的: 运行时出现此错误: 我想知道是否可以不使用嵌套循环(如上)来完成。我知道我做错了,如果有人可以在此问题上提供帮助,那就太好了。我也不确定要在Java文档中寻找什么类。 问题答案: 您可以检查较大的数组是否包含较小数组中的
问题内容: 说我有这些二维数组A和B。 如何从B中删除A中的元素。(集合论中的补语:AB) 更准确地说,我想做这样的事情。 问题答案: 基于this solution对,这里是用更少的内存占用与NumPy基础的解决方案,并与大型阵列工作时,可能是有益的- 样品运行- 在大型阵列上的运行时测试- 具有基础解决方案的时间- 基于更少内存占用量的定时解决方案- 进一步提升性能 通过将每一行视为索引元组来
我误解了如何删除数组中与另一个数组有匹配元素的元素。 示例: 预期: 希望能举一些例子来说明如何做到这一点。用两个forEach或filter和checking语句尝试了很多次,但我总是得到错误的结果。
问题内容: 我有两个数组 我想从array1中删除array2的元素 问题答案: 最简单的方法是将两个数组都转换为集合,从第一个数组中减去第二个数组,将结果转换为数组,然后将其分配回: 请注意,您的代码不是有效的Swift-您可以使用类型推断来声明和初始化两个数组,如下所示:
问题内容: 我想找出$ all是否包含所有$ search_this值并返回true或false。有什么想法吗? 问题答案: 看一下array_intersect()。