Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Код не проходит проверку кодварс на поиск уникального числа в массиве js

VIktor Ученик (39), закрыт 1 год назад
половину тестов проходит,половину нет, неп проходит тест если уникальное число типа float и бесконечность+-.Почему?
 function findUniq(arr) { 
arr = parseInt(
arr.filter((el, i, arr) => arr.indexOf(el) === arr.lastIndexOf(el))
);
return arr;
}

На входе массив, цифр где все элементы одинаковы, и один уникальный.
Лучший ответ
фигня какая-та Мастер (1002) 1 год назад
наверное из-за учета типа, такое выдаст 1, хотя должно 2:
 findUniq([1,1,'1',2,3,3,4,4]) 

там же должен быть чеклист проверок и на каждом пунке должна быть отметка пройдено или нет, мы не можем угадать какие у тебя там проверки, ты ничего не скинул нам.

хоть '1' и строка, но все еще является числом.
пробуй поставить плюсик к каждому из el в условии (для принудительного приведения к типу number):
 arr.indexOf(+el) === arr.lastIndexOf(+el) 
с таким вариантом уже выдает 2
VIktorУченик (39) 1 год назад
у меня стоит parseInt же, он уже переводит в число, я вообще не про это спрашивал, я спрашивал почему не работает с числами типа float и с +- inf
фигня какая-та Мастер (1002) S1ayer, parseInt у тебя совсем другую функцию выполняет. Ты фильтруешь массив, получаешь из него результат по типу [2.3] либо [Inifinity], потом пихаешь новый полученный массив под parseInt и ожидаешь, что он сработает правильно. Убери parseInt, вместо этого используй [0], поставь плюсики где я говорил и функция заработает как надо.
 function findUniq(arr) { 
  return arr.filter((el, i, arr) => arr.indexOf(+el) === arr.lastIndexOf(+el))[0]; 
} 
фигня какая-таМастер (1002) 1 год назад
можешь не ставить плюсики, тогда функция будет не только для чисел работать
Остальные ответы
Николай Веселуха Высший разум (356548) 1 год назад
 const uniqueValue = (arr) => { 
const count = (seq, value) => {
let n = 0;
for (let item of seq) {
if (value === item) {
++n;
}
}
return n;
};
let box = arr.flat(Infinity);
for (let item of box) {
if (count(box, item) == 1) {
return item;
}
}
return false;
};
let arr = [1, 4, 1, Infinity, 3, 1, 3, 4, 3, 4];
let res = uniqueValue(arr);
if (res) console.log(res);
Похожие вопросы