Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как удалить повторяющиеся значения с массива? (https://javascript.ru/forum/misc/58230-kak-udalit-povtoryayushhiesya-znacheniya-s-massiva.html)

Валерий1996 10.09.2015 16:33

Как удалить повторяющиеся значения с массива?
 
Есть массив, с которого нужно удалить повторяющиеся значения , но оставить одно уникальное. Например : [privet, privet, kakdela ] должно получится [privet, kakdela].

А у меня выходит так [kakdela ] то есть удаляет все повторы не оставляя ни одного . Подскажите как исправить код ?

var array = [1, 2, 1, 10, 5, 3, 4, 40, 50],

     i = array.length,

     result = [];

 array.sort(function (a, b) {

     return a - b;

 });

 for (var i = 0; i < array.length; i++) {

     array[i] != array[i - 1] && array[i + 1] != array[i] && result.push(array[i])

 }

 alert(result);

caetus 10.09.2015 17:00

function fn (arg) {
var result = [];
var obj = {}

for(var i = 0; i < arg.length; i++) {
    obj[arg[i]] = arg[i];
}

for(var i in obj) {
   result.push(obj[i])
}

return result;
}


var arg = fn([22,22,1,2,2,1,1,3,4,5,6,10000, 10000, 1000000,1000000,1000000,1000000,1000000, 'privet', 'privet', 'str', 'str']);

console.log(arg)

Lemme 10.09.2015 17:10

Array.prototype.unique = function() {
	return this.filter(function(value, index, _this) {
    	return _this.indexOf(value) === index;
    });
}

alert([1,2,3,3,3,4,5,6,7,7,8,3,4,5,6,1,4,5,8,9,3,2, 'q', 'q', 'aaaa'].unique());

caetus 10.09.2015 17:10

или так
//массив должен быть отсортирован
function f(arg) {
var result = [];

for(var i = 0; i < arg.length; i++) {
   if(arg[i] == result[result.length-1]) continue;
   result.push(arg[i])
}

return result;
}


console.log(f([1,2,2,3,3,5,6]))

nerv_ 10.09.2015 17:23

alert(Array.from(new Set([1,2,3,1,2,3])))

Lemme 10.09.2015 17:32

nerv_, а потом будут вопросы - "а почему у меня не работает" :victory:
но спасибо, этого я тоже не знал=)

newKingOfTheBlock 13.09.2015 19:42

Цитата:

Сообщение от nerv_
alert(Array.from(new Set([1,2,3,1,2,3])))

Не стоит забывать, что JS -- какой-никакой ООП язык. Подобные структуры реализуются тривиально, безо всякого говна
copy=function(array){return array.map(function(x){return x})}


UnicArray=function(arr){this.array=[]; if(arr) this.add(arr)}
UnicArray.prototype = {
 add: function(array){
   var array=copy(array)
   var tmp
   while(array.length) if(this.array.indexOf(tmp=array.pop()) === -1) this.array.push(tmp)
 },
 show:  function(){ alert(this.array) }
}

myArray=new UnicArray([1,2,3,1,2,3,4])

myArray.show()

Разница в том, что реализуя кастомную структуру, мы имеем огромный выигрыш в гибкости. Не стоит тащить сюда лоховские конструкции, синтаксический мусор, там где надо и не надо, выдавая баги за фичи. Вся эта неуемная тяга к хипстерскому говну идет от банального непонимания языка, и его возможностей.

Если бы это было частью текущего стандарта, это еще имело бы какой-никакой смысл. Но это даже не стабильная версия. Ко времени принятия стандарта может все 1000 раз изменится, ее могут вообще убрать. Нахрен вы постите сюда этот мусор? Что вы пытаетесь этим сказать? Что Вы Илита? Хотите удивить кого-то?

Lemme 13.09.2015 19:55

newKingOfTheBlock, а теперь посмотри на читаемость твоего кода.

Цитата:

Не стоит тащить сюда лоховские конструкции, синтаксический мусор
Некоторые люди до сих пор живут без кондиционеров и.т.д Ибо зачем? Ведь я могу взять тетрадку и сидя на деревянном стуле - помахать себе на лицо, и станет комфортно.....

newKingOfTheBlock 13.09.2015 19:58

Lemme,
Читаемость кода вот тут
myArray=new UnicArray([1,2,3,1,2,3,4])

Все остальное относится к реализации. Не думаю что нативная реализация Set выглядит проще этого.

Lemme 13.09.2015 20:03

newKingOfTheBlock, ну, дело твое, не буду спорить, ибо мой скилл "не дорос" еще до споров.

А ТСу предложили уже достаточно вариантов, пусть выбирает, что душе угодно ;)


Часовой пояс GMT +3, время: 17:35.