逻辑算法总结

1.场景:两个数组A和B,并且A包含B,A和B都是对象数据,如何找出A在B中不存在的项,并且改变这个不存在项的某个属性值。

let A = [{id:'1',status:'1'},{id:'2',status:'1'},{id:'3',status:'1'},{id:'4',status:'1'}];
let B = [{id:'1',status:'1'},{id:'2',status:'1'}];
//分析步骤
//1.先循环A和B两个数组 把数组中的对象唯一属性id值存入定义好的数组中
let aIds = [];//A数组id组合
let bIds = [];//B数组id组合
let findIds = [];//不存在的数据
if(A && A.length > 0){
  A.forEach(item=>{
      aIds.push(item.id);
  })
}
if(B && B.length > 0){
  B.forEach(item=>{
      bIds.push(item.id);
  })
}
//2.循环aIds数组 找到不存在的项组合 并循环A数组依次对比不存在的findIds 并改变相应属性值
if(aIds && aIds.length > 0){
  aIds.forEach(item=>{
      if(bIds.indexOf(item) == -1){
          //A在B里找不到的项
          findIds.push(item);
      }
  })
  if(A && A.length > 0){
          A.forEach(item=>{
              if(findIds && findIds.length > 0){
                  findIds.indexOf(item.id);
                  item.status = '2';
              }
          })
  }
}

2.使用Set可以很容易地实现并集(Union)、交集(Intersect)和差集(Difference)

let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);

// 并集
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4}

// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}

// 差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}

tips:如果有更好更简便的方法,欢迎留言~

你可能感兴趣的:(逻辑算法总结)