Страницы

Поиск по вопросам

среда, 29 января 2020 г.

Не добавляются уникальные элементы в массив

#javascript #массивы


Пишу свой велосипед по удалению одинаковых элементов массива. Как бы при выводе в
консоль дубли не попадаются т.е выводится всё как нужно (1, 11, 2, 4, 5, 3). Но при
этом в результирующий массив res ничего не попадает. Помогите исправить

var res = [];
var a = [1, 1, 11, 2, 4, 2, 5, 3, 1];
var N = a.length;
for (i = 0; i < N; i++) {
   f = 1;
   for (j = 0; j < N; j++) 
      if (a[i] == a[j] && i != j) {
         f = 0;
         break;
      }
      if (f == 1){ 
         console.log(a[i]); //в консоле(1,11,2,4,5,3)
         res.push(a[i]) // в итоговом массиве 1,1,11,2,4,2,5,3,1 -----что не верно
      }
   }
}

    


Ответы

Ответ 1



Честно говоря не хочу смотреть ваш велосипед. Да он и в консоль выводит дубли. Не знаю как вы проверяли. Но, кмк, проще сделать так: var arr = [1, 1, 11, 2, 4, 2, 5, 3, 1]; var set = new Set(arr); arr = Array.from(set); console.log(arr); Объекты Set позволяют сохранять уникальные значения любого типа, как примитивы, так и другие типы объектов. (вроде браузеры поддерживают) Array.from() создаёт новый экземпляр Array из массивоподобного или итерируемого объекта.

Ответ 2



Получение уникальных элементов через Array.filter: var arr = [1, 1, 11, 2, 4, 2, 5, 3, 1]; arr = arr.filter(function(itm, i, a) { return i === a.indexOf(itm); }); console.log(arr); Отлично поддерживается браузерами (IE9+) в отличие от красивого и современного способа @АлексейШиманский, который, к сожалению, не работает даже в IE11 (из-за Array.from), если поддержка IE важна. Если поддержка IE не важна или используется Babel, то можно сделать то же самое через arrow function: var arr = [1, 1, 11, 2, 4, 2, 5, 3, 1]; arr = arr.filter((itm, i, a) => i === a.indexOf(itm)); console.log(arr);

Ответ 3



Update 3: Предлагаю вам такое решение: $(function() { var a = [1, 1, 11, 2, 4, 2, 5, 3, 1]; var b = []; for(var i = 0; i < a.length; i++){ var status = 1; for(var j = 0; j < b.length; j++){ if(a[i] == b[j]){ status = 0; }; }; if(status == 1){ b[b.length] = a[i]; }; }; console.log(a); console.log(b); });

Комментариев нет:

Отправить комментарий