JavaScript--数组比较,返回两个数组之间的差异,数组 a 上过滤出数组 b 中不包含的值

const difference = (a, b) => {
  a = a.map(ee => JSON.stringify(ee))
  b = b.map(ee => JSON.stringify(ee))
  const arr = a.filter(x => !b.includes(x));
  return arr.map(ee => JSON.parse(ee))
};
// 或者
// const difference = (a, b) => {
//   a = a.map(ee => JSON.stringify(ee))
//   b = b.map(ee => JSON.stringify(ee))
// // 使用set方法的好处就是去重
//   s = new Set(b);
//   const arr = a.filter(x => !s.has(x));
//   return arr.map(ee => JSON.parse(ee))
// };

// 将字母转为ascii码的方法:
const charCodeAt = str => str.charCodeAt();
//将ascii码转为对应字母的方法:
const fromCharCode = num => String.fromCharCode(num);

// 降序排序
const sort = (arr) => {
  return arr.map(ee=>{
    return Object.keys(ee).sort(function(a,b) {
      return charCodeAt(b)-charCodeAt(a)
    }).map(function(v) {
      return {[v]:ee[v]}; // 根据原键名从obj中再找对应的项
    })
  })
}


console.log(difference(sort([{
  label:'a',
  value: 1
},{
  label:'b',
  value: 2
}]),sort([{
  value: 1,
  label:'a',
},{
  label:'c',
  value: 3
}])))

//[{value: 2, label: "b"}]

console.log(difference([1,2,3],[1]))//[2, 3]

 

当然,还可以再优化:

1.先去重: https://blog.csdn.net/qq_42750608/article/details/108608400

2.再针对数组里面的对象排序

3.数组比较

你可能感兴趣的:(算法,JavaScript面试问题)