На данный вопрос уже ответили:
Всем привет такая проблемма, не могу понять где ошибка в моём коде.
Задача заключается в том, что нужно вернуть массив, состоящий только из неуникальных элементов данного массива. Мой код работает но почему-то не доконца правильно.
function nonUniqueElements(array) {
var new_array = [];
// var count = 0;
for (var i = 0; i < array.length; i++) {
for (var j = 0; j < array.length; j++)
if (array[i] !== array[j]) {
array.splice(array[i], 1);
return array;
}
}
return array;
}
console.log(nonUniqueElements([1, 2, 3, 1, 3]));
console.log(nonUniqueElements([1, 2, 3, 4, 5]));
console.log(nonUniqueElements([5, 5, 5, 5, 5]));
console.log(nonUniqueElements([10, 9, 10, 10, 9, 8]));
Если посмотреть в консоль то 1 и 3 -й варианты получаются правильно, но остальные нет.
Всё немного сложнее чем кажется, вы допустили много ошибок, во первых у вас удаляется один элемент, после которого цикл завершается возвратом массива, во вторых вы удаляете элемент с неправильной позиции используя значение array[i], вместо i, также при удалении элемента из массива, нужно учитывать, что индексы сдвигаются, поэтому необходимо вернуть индекс на один назад.
Вот решение, если текущий элемент единственный, то он удаляется:
function nonUniqueElements(array) {
for (var i = 0; i < array.length; i++) {
if(array.filter(item => item == array[i]).length == 1){
array.splice(i, 1);
--i;
}
}
return array;
}
console.log(nonUniqueElements([1, 2, 3, 1, 3]));
console.log(nonUniqueElements([1, 2, 3, 4, 5]));
console.log(nonUniqueElements([5, 5, 5, 5, 5]));
console.log(nonUniqueElements([10, 9, 10, 10, 9, 8]));
function nonUniqueElements(array) {
var counts = {};
array.forEach(item => counts[item]? counts[item]++ : counts[item] = 1);
return array.filter(item => counts[item] > 1);
}
console.log(nonUniqueElements([1, 2, 3, 1, 3]));
console.log(nonUniqueElements([1, 2, 3, 4, 5]));
console.log(nonUniqueElements([5, 5, 5, 5, 5]));
console.log(nonUniqueElements([10, 9, 10, 10, 9, 8]));
function nonUniqueElements(array) {
return array.filter((el, i, arr) => arr.indexOf(el) != arr.lastIndexOf(el));
}
console.log(nonUniqueElements([1, 2, 3, 1, 3]));
console.log(nonUniqueElements([1, 2, 3, 4, 5]));
console.log(nonUniqueElements([5, 5, 5, 5, 5]));
console.log(nonUniqueElements([10, 9, 10, 10, 9, 8]));
Сборка персонального компьютера от Artline: умный выбор для современных пользователей