#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); });
Комментариев нет:
Отправить комментарий