Вроде элементарная задачка
Всем привет, сам себе придумал задачу и не могу ее решить.
Суть : Верно ли, что это число содержит ровно три одинаковые цифры, как, например, числа 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, помогите пожалуйста. |
Я понимаю что все дело в
if(counter >=3){ arr.push(a); Но не врубаюсь куда я его должен правильно вставить |
hujak_hujak,
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [js] ... ваш код... [/js] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
hujak_hujak, было уже
|
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))
|
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));
|
Спасибо большое, а насчет "было уже", сорри, я тут новенький, буду знать
|
Мой маленький велосипед :)
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));
|
Ещё вариант для полноты картины :)
<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> |
вариантов может быть очень много :)
var temp = {};
alert(JSON.stringify(('' + 34342224).split('').filter(function (a) {
return temp[a] = ++temp[a] || 1, temp[a] == 3;
})));
|
| Часовой пояс GMT +3, время: 13:12. |