从多个数组中获取唯一值

这是我拥有的数组:


var a = [A];

var b = [F, A];

var c = [B, A];

var d = [C, B, A];

var e = [D, C, B, A];

var f = [E, C, B, A];

var g = [G, E, C, B, A];

我想运行一个函数并获取只出现一次的元素列表,所以输出应该是:


[F, D, G]

谢谢!


大话西游666
浏览 149回答 2
2回答

红颜莎娜

您可以使用一个对象来存储每个值的频率,并仅获取频率为 1 的条目。下面的代码.flat(Infinity)用于确保它适用于任何级别的嵌套数组;如果您没有任何嵌套数组,只需使用即可.flat()。var a = ['A'];var b = ['F', 'A'];var c = ['B', 'A'];var d = ['C', 'B', 'A'];var e = ['D', 'C', 'B', 'A'];var f = ['E', 'C', 'B', 'A'];var g = ['G', 'E', 'C', 'B', 'A'];function getUniqueValues(...args){  return Object.entries(      args.flat(Infinity)          .reduce((acc,curr)=>(acc[curr] = (acc[curr] ?? 0) + 1, acc), {})    ).filter(([key,val])=>val===1).map(([key])=>key);}console.log(getUniqueValues(a,b,c,d,e,f,g));

HUX布斯

这个解决方案的复杂度可能不好const input: string[][] =  [['A'],  ['F', 'A'],  ['B', 'A'],  ['C', 'B', 'A'],  ['D', 'C', 'B', 'A'],  ['E', 'C', 'B', 'A'],  ['G', 'E', 'C', 'B', 'A']];let output: string[] = [];let flagged: string[] = [];input.filter(innerArray => {    innerArray.filter(elem => {        if(!output.includes(elem) && !flagged.includes(elem))            output.push(elem);        else        {            flagged.push(elem);            output = output.filter(i => { return i !== elem });        }    });});console.log(output);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript