Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 19.02.2014, 20:28
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

BallsShaped, не правильно ты понял. Если элемент имеет дубль - то ни он, ни его дубль не попадает в результат. В результат попадают только уникальные элементы.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #12 (permalink)  
Старый 19.02.2014, 20:31
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

рони, не вижу своего варианта
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #13 (permalink)  
Старый 19.02.2014, 20:34
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

И сделай bound запятую. И вобще, я же уже вычистил код и привел единому виду. Лучше сделай генерацию рэндомных массивов.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #14 (permalink)  
Старый 19.02.2014, 20:35
Аватар для Дзен-трансгуманист
√₋̅₁̅
Отправить личное сообщение для Дзен-трансгуманист Посмотреть профиль Найти все сообщения от Дзен-трансгуманист
 
Регистрация: 18.06.2012
Сообщений: 385

EcmaScript 6 Map

function uniquesOnly ( source ) {

  var uniqueness = new Map();

  source.forEach( function ( value ) {
    switch ( uniqueness.get( value )) {
      case undefined: uniqueness.set( value, true ); return;
      case true: uniqueness.set( value, false );
    }
  });

  return source.filter( function ( value ) {
    return uniqueness.get( value );
  });
}

alert(uniquesOnly([1, 2, 1, 10, 5, 3, 4, 40, 50]));
__________________

Гейзенберг, возможно, читал этот тред.
Ответить с цитированием
  #15 (permalink)  
Старый 19.02.2014, 20:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

убрал сравнение копипаст был неудачным )))
Ответить с цитированием
  #16 (permalink)  
Старый 19.02.2014, 20:46
Аватар для Дзен-трансгуманист
√₋̅₁̅
Отправить личное сообщение для Дзен-трансгуманист Посмотреть профиль Найти все сообщения от Дзен-трансгуманист
 
Регистрация: 18.06.2012
Сообщений: 385

Ну че, запилете мою функцию в тесты? ))))
__________________

Гейзенберг, возможно, читал этот тред.
Ответить с цитированием
  #17 (permalink)  
Старый 19.02.2014, 20:56
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Дзен-трансгуманист, интересный вариант
Думаю в случае с числовым/строчным массивом уместен упрощенный вариант:

var array = [1, 2, 1, 10, 5, 3, 4, 40, 50];
var uniqueness = {};
for (var i = 0; i < array.length; i++) {
    var item = array[i];
    switch (uniqueness[item]) {
      case undefined:
          uniqueness[item] =  true;
          break;
      case true:
          uniqueness[item] = false;
    }
}

var result = array.filter(function (value) {
    return uniqueness[value];
});

alert(result);
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #18 (permalink)  
Старый 19.02.2014, 21:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

обычно я делал так ... новый вариант и сравнение
var time_roni = new Date
for (var a=0; a<10000; a++)  {
    var array = [1, 2, 1, 10, 5, 3, 4, 40, 50],
     tmp = {},
     result = [];
 for (var i=0; i<array.length; i++)  {tmp[array[i]] = tmp[array[i]]?++tmp[array[i]]:1}
 for (var i = 0; i < array.length; i++) {
      tmp[array[i]] == 1 && result.push(array[i])
 }

  }
var time_roni = (new Date).getTime() - time_roni.getTime() ;
function uniquesOnly ( source ) {

  var uniqueness = new Map();

  source.forEach( function ( value ) {
    switch ( uniqueness.get( value )) {
      case undefined: uniqueness.set( value, true ); return;
      case true: uniqueness.set( value, false );
    }
  });

  return source.filter( function ( value ) {
    return uniqueness.get( value );
  });
}
var time_dzen = new Date
for (var a=0; a<10000; a++)  {
uniquesOnly([1, 2, 1, 10, 5, 3, 4, 40, 50]);
                           }
var time_dzen = (new Date).getTime() - time_dzen.getTime() ;
var time_danik  = new Date
for (var a=0; a<10000; a++)  {
var array = [1, 2, 1, 10, 5, 3, 4, 40, 50];
var result = [];
for (var i = 0; i < array.length; i++) {
    var item = array[i];
    if (array.indexOf(item, i + 1) === -1 && (i === 0 || array.lastIndexOf(item, i - 1) === -1))
        result.push(item);
}
}
var time_danik = (new Date).getTime() - time_danik.getTime() ;
alert([time_roni,time_dzen,time_danik])
Ответить с цитированием
  #19 (permalink)  
Старый 19.02.2014, 21:18
Профессор
Отправить личное сообщение для BallsShaped Посмотреть профиль Найти все сообщения от BallsShaped
 
Регистрация: 14.09.2012
Сообщений: 162

.filter(function (item, index, array) {
    return array.indexOf(item) == array.lastIndexOf(item);
})
Ответить с цитированием
  #20 (permalink)  
Старый 19.02.2014, 21:49
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

BallsShaped, ловко )
Обновил тесты. Не заметил что код рони модифицирует исходный массив.
Добавил вариант шарика, переписал циклы на простой for().

Вариант с Map() самый быстрый в хроме!
Цитата:
danik.js: 715.000ms
Deff: 4801.000ms
рони: 1662.000ms
Дзен-трансгуманист (danik.js edition): 1519.000ms
BallsShaped: 951.000ms
Дзен-трансгуманист: 380.000ms
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена элементов массива элементами массива prostoix Javascript под браузер 4 24.10.2013 17:36
Вывод случайных элементов из массива в таблицу Narm0 Общие вопросы Javascript 10 06.08.2013 12:39
Определить количество отрицательных элементов массива Тип_1 Общие вопросы Javascript 3 25.06.2012 18:24
Сгенерировать 2 последовательности и узнать сколько в них одинаковых элементов Ирина Владимировна Общие вопросы Javascript 10 24.03.2012 18:18
поиск одинаковых значений элементов массива Valstor Общие вопросы Javascript 20 09.12.2011 18:56