Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 23.01.2011, 01:41
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

все давно продумано: правильная версия 2 на дклабе

Array.prototype.union = function(list, callback)
{
        if ( 'function' != typeof callback ) {
                callback = function(value1, value2)
                {
                        return value1 != value2;
                }
        }

        var result = this;
        var L = result.length;
        var j;
        var u;
SEARCH_UNIQUE:
        for (var i = 0; i < list.length; i++) {
                j = 0;
                u = true;
                while ( j < L ) {
                        u = callback(result[j], list[i]);
                        if ( ! u ) {
                                continue SEARCH_UNIQUE;
                        }
                        j++;
                }
                result[L] = list[i];
                L++;
        }
        return result;
}

var arr1 = [1, 2, 3, 4];
var arr2 = [1, 4, 5, 6];
arr1.union(arr2);
alert(arr1);

var arr4 = [].union([1, 1, 3, 1, 4, 3, 5]);
alert(arr4);
Ответить с цитированием
  #12 (permalink)  
Старый 23.01.2011, 10:47
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от with-love-from-siberia
все давно продумано: правильная версия 2 на дклабе
чем эта версия правельней последних двух предыдуших вариантов в частносте моей и Zeroglif'a?
Ответить с цитированием
  #13 (permalink)  
Старый 23.01.2011, 14:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,125

На всякий случай
Сообщение от monolithed
reverse()
= return b-a;
var array = [1, 2, 1, 10, 5, 3, 4, 40, 50], i = array.length, result = [];

array.sort(function(a,b) {
*!*
    return b-a;
*/!*
});

while(i--){
    if(result.join().search(array[i]+'\\b') == '-1') {
        result.push(array[i]);
    }
}

alert(result);
Ответить с цитированием
  #14 (permalink)  
Старый 24.01.2011, 11:24
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от monolithed
чем эта версия правельней последних двух предыдуших вариантов в частносте моей и Zeroglif'a?
я думаю with-love-from-siberia не смог пройти мимо твоих попыток написать велосипед (ну ведь правда, твое решение и запутаннее, и медленнее версии Zeroglifa), но на деле получилось что-то вроде "что бы вы не делали с массивом, сохраняйте порядок элементов в нем, ибо!" или "на dklab'е уже все давным давно придумано, а вы тут..."
Ответить с цитированием
  #15 (permalink)  
Старый 24.01.2011, 15:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,125

with-love-from-siberia,
Ваш пример не делает начальный массив массивом только с уникальными данными, если он изначально содержит неуникальные данные, можно конечно обьеднить с пустым массивом, для получения уникального.
Вариант получения массива с уникальными данными из нескольких массивов, при желании полученный результирующий массив можно затем отсортировать дополнительно.
Array.prototype.unique = function () {
    for (var d = arguments.length, a = 0; a < d; a++)
    for (var c = arguments[a], b = 0; b < c.length; b++) this.push(c[b]);
    for (a = 0; a < this.length; a++)
    for (b = a + 1; b < this.length;) if (this[a] === this[b]) this.splice(b, 1);
    else b++;
    return this
};

var arr1 = [4, 4, 1, 2, 3, 4, 1, 2, 3, 4];
var arr2 = [1, 4, 5, 6];
var arr3 = [7, 6, 5, 4];
arr1.unique(arr2,arr3);
alert(arr1);
.
Ответить с цитированием
  #16 (permalink)  
Старый 24.01.2011, 16:26
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

x-yuri,
Моя вина - неудачная фраза. Подразумевается сохранность порядка элементов в массиве.

рони,
Простите меня, но я не до конца понял Вас. Правильно ли я понял, что Вы имеете в виду код, например, подобный этому?

var arr1 = [4, 4, 1, 2, 3, 4, 1, 2, 3, 4];
arr1.unique();
Ответить с цитированием
  #17 (permalink)  
Старый 24.01.2011, 16:31
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

x-yuri, я лишь хотел показать альтернативный (без slice'a) и менее громозкий вариант решения, относительно представленного ранее, а вариант Zeroglif'a безусловно могуч
Ответить с цитированием
  #18 (permalink)  
Старый 24.01.2011, 18:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,125

with-love-from-siberia,
Да)))
Ответить с цитированием
  #19 (permalink)  
Старый 25.02.2011, 04:49
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

monolithed, а Array.indexOf на что?

UPD
Это слегка запоздалое сообщение
Ответить с цитированием
  #20 (permalink)  
Старый 21.07.2015, 21:49
Новичок на форуме
Отправить личное сообщение для msmsoft Посмотреть профиль Найти все сообщения от msmsoft
 
Регистрация: 21.07.2015
Сообщений: 1

Вот еще один вариант:
var a = [1,1,2,3,4,4,1,5,1,6,1,1,7,1,1,7,1,1,7,1,1,1,8,0,9, 9,9,1];
var b = [];
a.sort();
console.log(a);
var i=0;
while (i < a.length) {
if (a[i] != a[i+1]) {
b.push(a[i]);
}
i++;
}
console.log(b);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как выбрать li элементы из первого уровня меню TicTac Общие вопросы Javascript 9 02.05.2013 21:05
Как удалить элемент из дерева DOM dummer jQuery 13 16.01.2011 16:19
Как удалить из памяти весь XML документ? EisBerg Events/DOM/Window 1 03.04.2010 14:45
Как удалить все пустые элементы UL smashercosmo Events/DOM/Window 13 25.02.2009 09:03
Как частично удалить текстовую строку из набора? Nubi jQuery 2 27.12.2008 22:11