Вы почти на месте.
splice () Первый параметр метода - это начальный индекс, индекс, с которого начинается изменение массива.
В вашем коде, vector.splice(vector[indexRepeated[i]], 1, null);
вы передаете значение по этому индексу в массиве vector
вместо этого индекса. Это является причиной неожиданного вывода.
Просто измените эту строку на vector.splice(indexRepeated[i], 1, null);
и отфильтруйте null
значения.
Live Пример:
function uniqueArrayValues(vector) {
var indexRepeated = [];
for (let i in vector) {
for (let j in vector) {
if (vector[i] == vector[j] && i != j && j != null && i != null && i < j) {
indexRepeated.push(j);
}
}
for (let i in indexRepeated) {
if (vector[indexRepeated[i]] != null) {
vector.splice(indexRepeated[i], 1, null);
}
}
}
return vector.filter(value => value !== null); // Can also use vector.filter(value => value);
}
var arr = [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5];
console.log(uniqueArrayValues(arr));
Вот еще несколько простых способов получения уникальных значений из массива.
1) Использование filter () :
var arr = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5];
var unique = arr.filter((value, index, arr) => index === arr.indexOf(value));
console.log(unique);
2) Использование Set () :
var arr = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5];
var unique = [...new Set(arr)];
console.log(unique);