Array assemble

a = [1, 2, 3];
b = [2, 4, 5];

ES7

// 并集
let union = a.concat(b.filter((v) => !a.includes(v))); // [1,2,3,4,5]

// 交集
let intersection = a.filter((v) => b.includes(v)); // [2]

// 差集
let difference = a.concat(b).filter((v) => a.includes(v) && !b.includes(v)); // [1,3]

ES6

let aSet = new Set(a);
let bSet = new Set(b);

// 并集
let union = Array.from(new Set(a.concat(b))); // [1,2,3,4,5]
console.log(union);

// 交集
let intersection = Array.from(
   new Set(a.filter((v) => bSet.has(v))) // [2]
);

// 差集
let differenceNew = Array.from(new Set(a.concat(b).filter((v) => aSet.has(v) && !bSet.has(v)))[(1, 3)]);
console.log(differenceNew);

ES5

// 并集
var union = a.concat(
  b.filter(function (v) {
     return a.indexOf(v) === -1;
   })
); // [1,2,3,4,5]

// 交集
var intersection = a.filter(function (v) {
    return b.indexOf(v) > -1;
}); // [2]

// 差集
var difference = a.filter(function (v) {
    return b.indexOf(v) === -1;
}); // [1,3]

console.log(union);
console.log(intersection);
console.log(difference);

考虑NaN情况

  var a = [1, 2, 3, NaN];
  var b = [2, 4, 5];

  var aHasNaN = a.some(function (v) {
    return isNaN(v);
  });
  var bHasNaN = b.some(function (v) {
    return isNaN(v);
  });

  // 并集
  var union = a.concat(
      b.filter(function (v) {
        return a.indexOf(v) === -1 && !isNaN(v);
      })).concat(!aHasNaN & bHasNaN ? [NaN] : []); // [1,2,3,4,5,NaN]

  // 交集
  var intersection = a.filter(function (v) {
      return b.indexOf(v) > -1;
    }).concat(aHasNaN & bHasNaN ? [NaN] : []); // [2]

  // 差集
  var difference = a.filter(function (v) {
      return b.indexOf(v) === -1 && !isNaN(v);
    }).concat(aHasNaN && !bHasNaN ? [NaN] : []); //1,3,NaN

  console.log(union);
  console.log(intersection);
  console.log(difference);

Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.icon-default.png?t=M4ADhttps://serious-lose.notion.site/Array-assemble-b8a99e6dce1542b4ad112d96683140af 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值