如何返回此数组中不重复的唯一值?

Mic*_*ael 3 javascript arrays

我有一个关于Javascript的问题。

这是以下数组: [1,0,0,0,0,0,0]

我想返回不重复的唯一值,即1。

有什么建议么?

我有这个:

var result = arr.filter(x => arr.indexOf(x) !== 0);
Run Code Online (Sandbox Code Playgroud)

Mah*_*Ali 13

使用indexOflastIndexOf

你可以比较indexOflastIndexOffilter()

let arr = [1,0,0,0,0,0,0];
let res = arr.filter(x => arr.indexOf(x) === arr.lastIndexOf(x));

console.log(res)
Run Code Online (Sandbox Code Playgroud)

如果只需要第一个元素,则可以使用 find()

let arr = [1,0,0,0,0,0,0];
let res = arr.find(x => arr.indexOf(x) === arr.lastIndexOf(x));

console.log(res)
Run Code Online (Sandbox Code Playgroud)

您可以使用删除重复项Set(),然后filter()在其上使用。

let arr = [1,0,0,0,0,0,0];
let res = [...new Set(arr)].filter(x => arr.indexOf(x) === arr.lastIndexOf(x));

console.log(res)
Run Code Online (Sandbox Code Playgroud)

使用嵌套 filter()

let arr = [1,0,0,0,0,0,0];
let res = arr.filter(x => arr.filter(a => a === x).length === 1);
console.log(res)
Run Code Online (Sandbox Code Playgroud)

使用对象和 reduce()

关于时间复杂度,这是最好的。

let arr = [1,0,0,0,0,0,0];
let obj = arr.reduce((ac,a) => (ac[a] = ac[a] + 1 || 1,ac),{});
let res = Object.keys(obj).filter(x => obj[x] === 1).map(x => +x || x);

console.log(res)
Run Code Online (Sandbox Code Playgroud)