У меня вопрос по Javascript.
Это следующий массив: [1,0,0,0,0,0,0]
Я хотел бы вернуть единственное значение, которое не повторяется, то есть 1.
Какие-либо предложения?
У меня есть это:
var result = arr.filter(x => arr.indexOf(x) !== 0);
покажите нам, что вы пробовали до сих пор.
@Эско это не то же самое
indexOf
и lastIndexOf
Вы можете сравнить indexOf
и lastIndexOf
и filter()
let arr = [1,0,0,0,0,0,0];
let res = arr.filter(x => arr.indexOf(x) === arr.lastIndexOf(x));
console.info(res)
Если вам нужен только первый элемент, вы можете использовать find()
let arr = [1,0,0,0,0,0,0];
let res = arr.find(x => arr.indexOf(x) === arr.lastIndexOf(x));
console.info(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.info(res)
filter()
let arr = [1,0,0,0,0,0,0];
let res = arr.filter(x => arr.filter(a => a === x).length === 1);
console.info(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.info(res)
Никогда не думал, что это решение раньше, аккуратное.
И во втором подходе вы можете использовать let res = arr.find((x,i) => i === arr.lastIndexOf(x));
вместо этого.
Объяснение того, как это работает: stackoverflow.com/questions/52297644/…
О, идеально! Спасибо.
Что-нибудь, что вы пробовали до сих пор?