在javascript中从另一个列表中减去一个列表的值

时间:2017-12-09 09:36:00

标签: javascript

如何删除.toplevel { height: 100vh; min-height: 800px; border: solid 1px blue; } .container { display: flex; border: solid 1px red; height: 100%; flex: 0 1 auto; flex-direction: column; // min-height: 800px; } .up { display: flex; flex: 1 1 auto; } .down { display: flex; flex: 0 1 auto; }中存在的<div class="toplevel"> <div class="container"> <div class="up"> This is up </div> <div class="up"> This is down </div> </div> </div>中的所有值如果b变量中存在值,则必须删除所有出现的值

var a = [1,2,2,2,3]

如何删除b var值。我们有很多逻辑请简要回答

5 个答案:

答案 0 :(得分:2)

一个简单的解决方案是使用Array#filter,并使用Array#indexOf检查值是否存在:

&#13;
&#13;
var a = [1, 2, 2, 2, 5];
var b = [2];

var result = a.filter(function(n) {
  return b.indexOf(n) === -1;
});

console.log(result);
&#13;
&#13;
&#13;

但是,这需要第二个阵列的冗余迭代。更好的解决方案是使用Array#reduceb创建字典对象,并在过滤中使用它:

&#13;
&#13;
var a = [1, 2, 2, 2, 5];
var b = [2];
var bDict = b.reduce(function(d, n) {
  d[n] = true;
  
  return d;
}, Object.create(null));

var result = a.filter(function(n) {
  return !bDict[n];
});

console.log(result);
&#13;
&#13;
&#13;

答案 1 :(得分:2)

您可以为不需要的商品选择Set

&#13;
&#13;
var a = [1, 2, 2, 2, 5],
    b = [2],
    result = a.filter((s => v => !s.has(v))(new Set(b)));

console.log(result);
&#13;
&#13;
&#13;

答案 2 :(得分:2)

使用数组filter()尝试以下操作:

var a = [1,2,2,2,5];
var b = [2];
var c = a.filter(item => !b.includes(item))
console.log(c)

答案 3 :(得分:1)

使用array.filter

&#13;
&#13;
var first = [1, 2, 2, 2, 5];
var second = [2];

var result = first.filter(function(n) {
  return second.indexOf(n) === -1;
});

console.log(result);
&#13;
&#13;
&#13;

答案 4 :(得分:1)

 var a = [1,2,2,2,5];
 var b = [2];
var result= a.filter(function(x) { 
  return b.indexOf(x) < 0;
});
console.log(result)