Нужно написать функцию, что принимает массив и возвращает другой, с уникальными значениями;
которая также проверяет обьекты и массивы и сравнивает их;
например из объекта
[1,2,3,3,NaN,null,2,'str',''str',NaN,null, [1,2,3],[1,2,3],[3,1,2],{1:1},{1:1},{1:2}]
на выходе получим
[1,2,3,NaN,nulln,[1,2,3],[3,1,2],{1:1},{1:2}]
function singleExemplar(array) {
var unique = [...new Set(array)];//отсекаем повторяющейся простые значения
далее, возможно, нужен перебор и детальное сравнивание обьктных типов, с удалением если сравнение оказалось положительное )
return unique;
}
Добавляем отдельный массив, в который будем записывать хэши уже сохраненных элементов исходного массива. Новые элементы с таким же хэшем добавлять в результирующий массив не будем.
Хэш получаем с помощью JSON.stringify
, но т.к. он вернет нам пустую строку для falsy-значений, то предварительно преобразуем значение в строку:
var arr = [1,2,3,3,NaN,null,false,false,undefined,2,undefined,'str','str',NaN,null, [1,2,3],[1,2,3],[3,1,2],{1:1},{1:1},{1:2}];
function u(arr) {
var unique=[],
hashes={};
for(var i = 0; i < arr.length; i++) {
var currentHash = JSON.stringify(!!arr[i] ? arr[i] : ''+arr[i]);
if(!hashes[currentHash]){
unique.push(arr[i]);
hashes[currentHash]=true;
}
}
return unique;
}
console.log(u(arr));
Но, как правильно заметили в комментарии, у JSON.stringify
есть ограничения:
JSON.stringify({a:1,b:2}) = '{"b":2,"a":1}'
Данных ограничений вполне достаточно, чтобы сказать, что данный метод не подходит для решения поставленной задачи, а потому не рекомендуется для использования.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Могу ли я при помощи jQuery сделать запрос к платежному серверу Robokassa(authrobokassa
Пытаюсь настроить vue в djangoПрошерстил все что только возможно но нормального полноценного гайда не нашел
Проблема - axios-запрос не цепляется к серверуОшибка "Network Error"
Необходимо написать jquery/js script, который бы при выставлении (в моем случае при выборе из селекта и нажатии на кнопку) двух одинаковых значений...