在vue项目中如何筛选出三个数组中共有的元素或者筛选出不同元素也可以

    var a = ['1', '2', '3']
    var b = ['2', '3']
    var c = ['4', '5','2']
    筛选出这三个数组共有的元素
阅读 6.1k
5 个回答

a.filter(i=> b.some(_i=>_i === i) && c.some(_i=> _i ===i))

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}
let a = ['1', '2', '3', '5'];
let b = ['2', '3', '5'];
let c = ['4', '5','2'];

console.log(getCommon(a, b, c));    // ['2', '5']

function getCommon(arrA, arrB, ...others) {
    if (others.length == 0) {
        return _two(arrA, arrB);
    } else {
        return getCommon(_two(arrA, arrB), ...others)
    }

    // 两个数组取交集
    function _two(a, b) {
        return a.filter(el => b.includes(el));
    }
}

fn 接受任意个需要筛选的数组

const fn = (...arg) =>
  arg
    .reduce((a, b) => {
      ;[...new Set(b)].forEach(_b => {
        const obj = a.find(({ key }) => key === _b)
        obj ? obj.value++ : a.push({ key: _b, value: 1 })
      })
      return a
    }, [])
    .filter(({ value }) => value === arg.length)
    // 如果需要查找每个数组唯一的所有的元素,注释上一行语句,把下一行语句取消注释
    // .filter(({ value }) => value === 1)
    .map(a=>a.key)
fn(a,b,c)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题