Javascript:用两个数组消除数组元素

时间:2018-08-23 11:55:34

标签: javascript arrays node.js

例如,我有两个这样的数组。

const data = ["John", "Andy", "Ruby"]
const eliminator = ["John"]

所以我希望得到这样的结果:

data = ["Andy", "Ruby"]

我对javascript很陌生。如果答案是纯JavaScript,将不胜感激,但非常欢迎高级答案。谢谢

4 个答案:

答案 0 :(得分:1)

使用Array.filter()过滤data数组中不存在的eliminator数组的值。

const data = ["John", "Andy", "Ruby"]
const eliminator = ["John"]
var res = data.filter(name => eliminator.indexOf(name) === -1);
console.log(res);

如果希望它在所有浏览器中都可以使用,则可以使用简单的函数声明。另外请注意,您需要使用indexOf()而不是includes()方法,因为includes()在IE浏览器中不起作用。

const data = ["John", "Andy", "Ruby"]
const eliminator = ["John"]
var res = data.filter(function(name){
   return eliminator.indexOf(name) === -1;
});
console.log(res);

如需进一步阅读,请参见:Array.filter()

答案 1 :(得分:0)

如果在整个项目中都使用此功能,则可以在数组类中添加diff原型。

Array.prototype.diff = function(eli) {
   return this.filter(function(i) {return eli.indexOf(i) < 0;});
};

之后,您可以在任何地方使用此方法...

data.diff(eliminator) 

为您提供所需的结果。

答案 2 :(得分:0)

使用filter()includes()(返回 true false )使代码更短。

const data = ["John", "Andy", "Ruby"]
const eliminator = ["John"]

var newData = data.filter(o=>!eliminator.includes(o))

console.log(newData)

答案 3 :(得分:0)

您可以使用Underscore.js _.difference()

const data = ["John", "Andy", "Ruby"];
const eliminator = ["John"];

var NewData = _.difference(data , eliminator);

// Result : NewData = ["Andy", "Ruby"]