Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вроде элементарная задачка (https://javascript.ru/forum/misc/63869-vrode-ehlementarnaya-zadachka.html)

hujak_hujak 05.07.2016 14:16

Вроде элементарная задачка
 
Всем привет, сам себе придумал задачу и не могу ее решить.
Суть :
Верно ли, что это число содержит ровно три одинаковые
цифры, как, например, числа 6676, 4544, 0006 и т. д.?
Я хочу цифры, которые повторяются 3 раза, поместить единоразово в массив. Например чтобы 6676 => [6];
Код такой:

var x = " 34342224"; //Само число
var arr = []; // Массив, в который все положу
for(var i = 1; i <= x.length-1; i++){ //Здесь мы берем числа КОТОРЫЕ будем сравнивать
var a = x.charAt(i);
var counter = 0;
for (var j = 1; j <= x.length -1; j++){ // Здесь берем числа С КОТОРЫМИ будем сравнивать
if(a == x[j]){
counter++;
}
}
if(counter >=3){
arr.push(a);
}
}
Но вместо arr = [4,2] я получаю ["4", "4", "2", "2", "2", "4"];
Не могу справиться уже часа 2, помогите пожалуйста.

hujak_hujak 05.07.2016 14:20

Я понимаю что все дело в
if(counter >=3){
arr.push(a);
Но не врубаюсь куда я его должен правильно вставить

рони 05.07.2016 14:30

hujak_hujak,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

Viral 05.07.2016 14:37

hujak_hujak, было уже

рони 05.07.2016 14:42

hujak_hujak,
var x = "34342224"; //Само число
var arr = []; // Массив, в который все положу;
var obj = {}; //Обьект для исключения повторных проверок
for(var i = 0; i < x.length; i++){ //Здесь мы берем числа КОТОРЫЕ будем сравнивать
var a = x.charAt(i);
if (obj[a]) continue;
obj[a] = true;
var counter = 1;
for (var j = i + 1; j < x.length; j++){ // Здесь берем числа С КОТОРЫМИ будем сравнивать
if(a == x[j]){
 counter++;
 }
 }
 if(counter == 3){
 arr.push(a);
 }
 }
 alert(JSON.stringify(arr))

Dilettante_Pro 05.07.2016 14:51

var x = " 34342224"; //Само число
var arr = []; // Массив, в который все положу
for(var i = 0; i <= 9; i++){ //Здесь мы берем числа КОТОРЫЕ будем сравнивать
   var a = i.toString(); 
   var counter = 0;
   for (var j = 0; j <= x.length ; j++){ // Здесь берем числа С КОТОРЫМИ будем сравнивать
      if(a == x[j]){
         counter++;
      }
   }
   if(counter >=3){
      arr.push(a);
   }
}
alert(JSON.stringify(arr));

hujak_hujak 05.07.2016 15:28

Спасибо большое, а насчет "было уже", сорри, я тут новенький, буду знать

Vlasenko Fedor 05.07.2016 16:18

Мой маленький велосипед :)
var arr = [73435, 968959, 450300],
    result = arr.reduce(function(prev, el) {
        el = el.toString().split('').sort().join('');
        if (/(\d)\1{2}/.test(el)) {
            prev.push(el.replace(/^.*(\d)\1{2}.*$/, '$1'));
        }
        return prev;
    }, []);
    alert(JSON.stringify(result));

var arr = [73435, 968995988, 450300, 226],
    result = arr.reduce(function(prev, el) {
        el = el.toString().split('').sort().join('');
        if (/(\d)\1{2}/.test(el)) {
            prev.push(el.match(/(\d)\1{2}/g).map(function(val) {
              return val[0];
            }));
        }
        return prev;
    }, []);
    alert(JSON.stringify(result));

destus 05.07.2016 19:26

Ещё вариант для полноты картины :)
<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"></script>
<script>
alert(JSON.stringify(_.uniqBy(_.flatten(_.filter(_.groupBy([..."34342224"]), v => v.length === 3)))))
</script>

Vlasenko Fedor 05.07.2016 23:46

вариантов может быть очень много :)
var temp = {};
alert(JSON.stringify(('' + 34342224).split('').filter(function (a) {
    return  temp[a] = ++temp[a] || 1, temp[a] == 3;
})));


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