Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.05.2016, 12:14
Профессор
Отправить личное сообщение для Blondinka Посмотреть профиль Найти все сообщения от Blondinka
 
Регистрация: 21.03.2014
Сообщений: 173

Найти тройные дубликаты в массиве
Добрый день.

Нужно найти тройные дубликаты в массиве. Код
function myFunction() {
var arr = [9, 9, 9, 111, 2, 3, 4, 4, 5, 7];
var sorted_arr = arr.slice().sort(); 
var results = [];
for (var i = 0; i < arr.length - 1; i++) {
    if (sorted_arr[i + 1] == sorted_arr[i] == sorted_arr[i+2]) {
        results.push(sorted_arr[i]);
    }
}

alert(results);
}
с тройными не работает.

Этот, тоже, не работает.
function myFunction() {
    var fruits = [3, 3, 3, 5, 4, 6, 8, 9];
    var a = fruits.sort();
    document.getElementById("demo").innerHTML = a;
    for(var i = 0, j = 1, k = 2; i < fruits.length, j < fruits.length, k < fruits.length; i++, j++, k++){
        if(fruits[i].valueOf() == fruits[j].valueOf() == fruits[k].valueOf()){
            alert(fruits[i].valueOf()+" "+fruits[j].valueOf() +" "+fruits[k].valueOf());
        }
    }
}
Ответить с цитированием
  #2 (permalink)  
Старый 13.05.2016, 12:58
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

var arr = [9, 9, 9, 111, 5, 2, 5, 3, 4, 4, 5, 7],
     count = [];

for (var i = 0; i < arr.length; i++) {
      count[arr[i]]= (count[arr[i]] | 0) + 1;
}
count.forEach(function(item, j, array) {
  if (item==3) {
  alert( j );
  }
});

Или дубликаты - когда подряд?
Ответить с цитированием
  #3 (permalink)  
Старый 13.05.2016, 13:13
Профессор
Отправить личное сообщение для Blondinka Посмотреть профиль Найти все сообщения от Blondinka
 
Регистрация: 21.03.2014
Сообщений: 173

Dilettante_Pro,
Спасибо. Для облегчения поиска дубликатов, делала сортировку.
Ответить с цитированием
  #4 (permalink)  
Старый 13.05.2016, 13:52
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Вариант.
<script src="http://underscorejs.ru/underscore-min.js"></script>
<script>
    _.chain([9, 9, 9, 111, 5, 2, 5, 3, 4, 4, 5, 7])
            .countBy()
            .each( (val, key) => (val === 3) && (alert(key)))
</script>
Ответить с цитированием
  #5 (permalink)  
Старый 13.05.2016, 14:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

без повтора и двойные, тройные, четверные ... в массиве

<script>
var arr = [9, 9, 9, 111, 5, 2, 5, 3, 4, 4, 5, 7];
function foo(a, c) {
    c--;
    var d = {};
    return a.filter(function(b, e, a) {
        if (d[b]) return !1;
        d[b] = !0;
        for (var f = 0; ~(e = a.indexOf(b, ++e));) f++;
        return f == c
    })
};

document.write(JSON.stringify(foo(arr,1)) + "<br>")//без повтора
document.write(JSON.stringify(foo(arr,3)))// тройные дубликаты

  </script>
Ответить с цитированием
  #6 (permalink)  
Старый 13.05.2016, 14:53
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

рони,
Реальность такова, что мой вариант быстрее и красивее
Ответить с цитированием
  #7 (permalink)  
Старый 13.05.2016, 15:09
Профессор
Отправить личное сообщение для Blondinka Посмотреть профиль Найти все сообщения от Blondinka
 
Регистрация: 21.03.2014
Сообщений: 173

destus, да, но там нужно грузить библиотеку. А у меня вся программа на чистом JS.
Ответить с цитированием
  #8 (permalink)  
Старый 13.05.2016, 15:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Dilettante_Pro,
опухнет же массив count
destus,
может и быстрее , но грузить библиотеку предварительно и конвертировать полученный результат.
Ответить с цитированием
  #9 (permalink)  
Старый 13.05.2016, 15:18
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Цитата:
А у меня вся программа на чистом JS.
Что насчет кросс-браузерности? Или вы свой фрэймворк разрабатываете?
Цитата:
но грузить библиотеку предварительно
15кб...
Underscore - вне закона и должна быть на каждом большом проекте

Последний раз редактировалось destus, 13.05.2016 в 15:20.
Ответить с цитированием
  #10 (permalink)  
Старый 13.05.2016, 15:23
Профессор
Отправить личное сообщение для Blondinka Посмотреть профиль Найти все сообщения от Blondinka
 
Регистрация: 21.03.2014
Сообщений: 173

Кто-нибудь знает, почему мой код не работает?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти максимальный элемент в массиве. Alex961 Общие вопросы Javascript 4 29.12.2015 13:49
Как найти дубли в массиве optsar jQuery 6 10.12.2015 21:46
Как найти совпадения в массиве и добавить их в двумерный массив? Armen Общие вопросы Javascript 4 23.04.2015 13:27
Как найти и посчитать одинаковые изображения в массиве? Michael_isr Общие вопросы Javascript 2 05.08.2014 16:55
Как найти индекс по элементу в двумерном массиве? bayah Общие вопросы Javascript 5 22.04.2010 16:26