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, ну, дело твое, не буду спорить, ибо мой скилл "не дорос" еще до споров.

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

newKingOfTheBlock 13.09.2015 20:03

Цитата:

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

Еще не известно что лучше, с кондиционрами или без. У меня кондиционер на работе. дома нет и не будет. Я хожу курить на улицу каждые полчаса, возвращаюсь потным. Постоянно думаешь, как бы не простудиться. Забивать этим голову целый день -- сомнительное удовольствие.

рони 13.09.2015 20:04

:)
http://javascript.ru/forum/events/45...v-massiva.html
http://javascript.ru/forum/misc/3714...s-massiva.html
http://javascript.ru/forum/misc/2842...u-klyuchu.html

Lemme 13.09.2015 20:05

newKingOfTheBlock, а я не вижу смысла экономить на своем комфорте.

Lemme 13.09.2015 20:06

рони, :)

фонарик 15.09.2015 14:35

А можно в 2х словах объяснить неандертальцу, почему такой простой вариант удаления повторяющихся элементов в массиве подвергся такой критике ? В каких случаях он не будет работать?
myArray=new UnicArray([1,2,3,1,2,3,4])

tsigel 15.09.2015 14:45

фонарик,
Не обращай внимания, newKingOfTheBlock(он же foo) - местный троль. Любитель не писать "var" и выступающий против es6 (который кстати недавно приняли). И вообще переодически пишет всякую чушь (что странно так как он вроде шарит хорошо). Советы от него советую использовать с крайней осторожностью.

newKingOfTheBlock 15.09.2015 14:53

Цитата:

Сообщение от фонарик
В каких случаях он не будет работать?

ты про Set? Вариант с Set вообще не будет работать, так как он не реализован в существующих движках. Только через трансляторы. Я хз, зачем он вообще тут это говно постит.

tsigel 15.09.2015 14:54

Lemme,
Изменять базовые прототипы - плохой тон.

tsigel 15.09.2015 15:00

Цитата:

Сообщение от newKingOfTheBlock
ты про Set? Вариант с Set вообще не будет работать, так как он не реализован в существующих движках. Только через трансляторы. Я хз, зачем он вообще тут это говно постит.

И снова мимо!
https://developer.mozilla.org/en-US/...al_Objects/Set

newKingOfTheBlock 15.09.2015 15:14

Цитата:

Сообщение от tsigel
мимо!

то есть, все пользователи используют исключительно те движки, где есть поддержка?
https://developer.mozilla.org/en-US/..._compatibility

tsigel 15.09.2015 15:17

ещё разок:

Цитата:

Сообщение от newKingOfTheBlock
Вариант с Set вообще не будет работать, так как он не реализован в существующих движках. Только через трансляторы.

Это мимо. Это реализовано. И работает много где. Варианты использования зависят только от целей автора. Например мне в nodewebkit вообще плевать на то что поддерживает не вебкид.

newKingOfTheBlock 15.09.2015 15:20

tsigel,
Короче, ты как всегда ляпнул чушь, а теперь оправдываешься. Мне это не интересно.

tsigel 15.09.2015 15:22

newKingOfTheBlock,
Ну вообще то как раз наоборот :) Впрочем я уже говорил твоему более рутовому инстансу что не буду шибко много дискутировать с тобой.

Lemme 15.09.2015 16:11

Цитата:

Изменять базовые прототипы - плохой тон.
Ну и ладно, меня то не пугает es6 :stop:


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