【问题标题】:How to return the only value that is not repeated in this Array? [duplicate]如何返回此数组中唯一不重复的值? [复制]
【发布时间】:2019-04-15 10:02:32
【问题描述】:

我有一个关于 Javascript 的问题。

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

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

有什么建议吗?

我有这个:

var result = arr.filter(x => arr.indexOf(x) !== 0);

【问题讨论】:

  • 到目前为止你尝试过什么?
  • 向我们展示你迄今为止尝试过的东西。
  • @Esko 不一样

标签: javascript arrays


【解决方案1】:

使用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)

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

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

console.log(res)

您可以使用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)

使用嵌套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)

使用对象和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)

【讨论】:

  • 以前从未想过这个解决方案,整洁的一个。
  • 而且,在第二种方法中,您可以改用let res = arr.find((x,i) => i === arr.lastIndexOf(x));
  • 哦,完美!谢谢。
猜你喜欢
  • 2020-07-27
  • 2014-08-19
  • 2017-04-05
  • 2015-03-25
  • 1970-01-01
  • 2013-07-18
  • 2012-12-29
  • 1970-01-01
相关资源
最近更新 更多