Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   удаляем одинаковые значения с массива (https://javascript.ru/forum/misc/37147-udalyaem-odinakovye-znacheniya-s-massiva.html)

qwermjk 09.04.2013 16:18

Мне кажется что по интерациям, быстрее мой способ!

devote 09.04.2013 16:46

Цитата:

Сообщение от qwermjk
Мне кажется что по интерациям, быстрее мой способ!

огромные массивы оба способа долго будут мучить.
самый быстрый вариант, это складывать уникальные значения в другой массив, тем самым не нужно будет пробегать по огромному массиву проверяя в нем же, его же значения.

nerv_ 09.04.2013 18:08

Цитата:

Сообщение от devote
самый быстрый вариант, это складывать уникальные значения в другой массив

а не в объект?

Aetae 09.04.2013 22:08

Цитата:

Сообщение от nerv_ (Сообщение 245121)
а не в объект?

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

nerv_ 10.04.2013 11:46

Цитата:

Сообщение от Aetae
Поясни.

Задача - уникальные в массиве.

var obj = {};
var newArr = [];

// цикл по массиву (arr)
// value

if ( !obj[ value ] ) {
    obj[ value ] = 1;
    newArr.push( value );
}

Aetae 10.04.2013 12:02

nerv_,
а теперь дочитай пост.)

P.S. Сам в своё время попался на эту "гениальную" идею.)

devote 10.04.2013 12:04

nerv_,
Aetae же упомянул что мы говорим не только о текстовых/примитивных значениях. Объекты так же могут быть в массиве, которые ты уже не сможешь поместить в объект в качестве ключа.
var arr = [document, document, window, document.body];

nerv_ 10.04.2013 12:29

Цитата:

Сообщение от Aetae
а теперь дочитай пост.)

:)

Цитата:

Сообщение от devote
var arr = [document, document, window, document.body];

конкретно на данный пример, можно сделать так
alert([
    document.toString(),
    document.toString(),
    window.toString(),
    document.body.toString()
]);


Ну а в целом: примитивы в объект, объекты в массив. Быстрее будет. Или нет? )

devote 10.04.2013 12:33

Цитата:

Сообщение от nerv_
конкретно на данный пример, можно сделать так

не надо придираться к написанному... Понятно дело что у этих объектов разные значения toString() но в простых объектах все иначе:
var a = {};
var b = {};
var arr = [a, a, b, b];

nerv_ 10.04.2013 14:48

Цитата:

Сообщение от Aetae
Сам в своё время попался на эту "гениальную" идею.)

вообще-то идея нормальная и вовсе не гениальная ) скорее стандартная )

Обычно, мы знаем с чем имеем дело. И, если надо из массива примитивов отобрать уникальные, вариант с объектом предпочтительней.

С другой стороны, с точки зрения абстрактной функции array_unique, ей должно быть все равно.


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