Найти тройные дубликаты в массиве 
		
		
		
		Добрый день. 
	Нужно найти тройные дубликаты в массиве. Код 
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());
        }
    }
}
 | 
	
		
 
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 );
  }
});
Или дубликаты - когда подряд?  | 
	
		
 Dilettante_Pro, 
	Спасибо. Для облегчения поиска дубликатов, делала сортировку.  | 
	
		
 Вариант. 
	
<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>
 | 
	
		
 без повтора и двойные, тройные, четверные ... в массиве 
		
		
		
		:) 
	
<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>
 | 
	
		
 рони, 
	Реальность такова, что мой вариант быстрее и красивее :D  | 
	
		
 destus, да, но там нужно грузить библиотеку. А у меня вся программа на чистом JS. 
	 | 
	
		
 Dilettante_Pro, 
	опухнет же массив count :-? destus, может и быстрее , но грузить библиотеку предварительно и конвертировать полученный результат.  | 
	
		
 Цитата: 
	
 Цитата: 
	
 Underscore - вне закона и должна быть на каждом большом проекте :)  | 
	
		
 Кто-нибудь знает, почему мой код не работает? 
	 | 
	
		
 Blondinka, 
	Цитата: 
	
  | 
	
		
 destus, 
	Писала на jQuery. 1. Столкнулась с тем, что не могу ничего написать без него. 2. Писала свой "большой проект" на jQuery и в один прекрасный день, он не запустился. Использовала CDN. Наверно, они там что-то обновили. Было очень обидно. 3. Часто встречаю выражение "джейквэримонки". Наверно, jQuery - зло. Подобное 1 раз встречала, по отношению к React. Пришла к выводу, что не стоит привыкать к библиотекам.  | 
	
		
 рони, 
	почему?  | 
	
		
 Blondinka, код будет верным если более 3 повторов в массиве нет, типа 1,1,1,1 иначе нужно менять алгоритм или использовать вариант предложенный выше 
	
function myFunction() {
var arr = [9, 9, 9, 111, 5, 2, 5, 3, 4, 4, 5, 7];
var sorted_arr = arr.slice().sort(function(a,b) {
   return b - a
});
var results = [];
for (var i = 0; i < arr.length - 2; i++) {
    if (sorted_arr[i + 1] == sorted_arr[i] && sorted_arr[i] == sorted_arr[i+2]) {
        results.push(sorted_arr[i]);
    }
}
alert(results);
}
myFunction()
 | 
	
		
 Цитата: 
	
  | 
	
		
 destus, откуда мне это было знать? Но тогда это был мой большой пет-проект. Сейчас я уже знаю, о существовании Bower/npm но не понимаю, как этим пользоваться. 
	 | 
	
		
 
var arr = [9, 9, 9, 111, 5, 2, 5, 3, 4, 4, 5, 7];
var res = arr.filter(function(value, index){
    return index != arr.indexOf(value) && index != arr.lastIndexOf(value);
});
alert(res);
 | 
	
		
 А что, если я хочу получить последовательность. Скажем, [2, 3, 4] ? 
	 | 
	
		
 Цитата: 
	
  | 
	
		
 рони, 
	тот же массив [9, 9, 9, 111, 5, 2, 5, 3, 4, 4, 5, 7] - > sort() Результат - первая последовательность из трёх чисел - [2, 3, 4]  | 
	
		
 Blondinka, 
	не понял ничего.  | 
	
		
 рони, 
	
var arr = [1, 2, 3, 4, 5];
for (var i = 0; i < arr.length; i++) {
      /*Magic*/
}
alert(result); //1,2,3 ||2,3,4 || 3,4,5
Результат - первая последовательность из трёх чисел.  | 
	
		
 Blondinka, 
	нашли и что в результате true или false? или как  | 
	
		
 Цитата: 
	
 
var arr = [9, 9, 9, 111, 5, 2, 5, 3, 4, 4, 5, 7];
var res = arr.sort(function(a, b){return a > b ? 1: a==b ? 0: -1}).slice(0, 3);
alert(res);
 | 
	
		
 рони, 
	в результате массив чисел.  | 
	
		
 Poznakomlus, 
	почти. Разница между числами должна быть 1. Например, из массива [1, 2, 4, 5, 6] результат будет [4,5,6], т.к. разница между этими числами == 1.  | 
	
		
 Цитата: 
	
  | 
	
		
 Blondinka, 
	а как вы разницу считаите?  | 
	
		
 рони, 
	Другими словами: у меня есть таблица. У каждой ячейки - числовой id. Мне нужно получить 3 пустых ячейки, которые идут подряд. Пользователь не заполнил 3 ячейки подряд? Отправить в ад!:p  | 
	
		
 Blondinka, 
	то есть это массив незаполненных ячеек ? тогда почему id повторяются  | 
	
		
 рони, 
	да, но только тех, что идут подряд. 3 необязательное число (но не меньше трёх). Может быть и 5. Гдавное, чтоб они шли подряд. Пример: 8, 9, 10, 11.  | 
	
		
 Blondinka, 
	вариант для 3 
<script>
var arr = [9, 9, 9, 111, 5, 2, 5, 3, 4, 4, 5, 7] ;
function test(a) {
    a = a.slice().sort(function(a, b) {
        return a - b
    });
    return a.some(function(c, b) {
        var d = a[b + 1],
            e = a[b + 2];
        return c == d - 1 && c == e - 2 && (a = [c, d, e])
    }) && a
};
document.write(JSON.stringify(test(arr)))
  </script>
 | 
	
		
 Цитата: 
	
  | 
	
		
 рони, 
	спасибо. Работает.  | 
	
		
 Blondinka, 
	почему дубликаты есть? id уникально  | 
	
		
 рони, 
	потому что я хотела усложнить себе задачу и написать хоть что-нибудь сама (переделать программу с "поиска дубликатов" на "поиск последовательностей"). Я знаю, что id уникально. В основном коде, оно добавляется только 1 раз.  | 
	
		
 Blondinka, 
	функция для последовательности любой длины больше 2, вернёт найденную первую последовательность или false. 
<script>
var a = [20,21,22,1,2,3,4,5,8] ;
function test(a) {
    a = a.slice().sort(function(a, b) {
        return a - b
    });
    return a.some(function(d, b) {
        var c = a.slice(b);
        c.some(function(a, b) {
            return a != c[b + 1] - 1 && (c = c.slice(0, b + 1))
        });
        return 2 < c.length && (a = c)
    }) && a
};
document.write(JSON.stringify(test(a)))
  </script>
 | 
	
		
 рони, спасибо. 
	 | 
| Часовой пояс GMT +3, время: 03:43. |