Вроде элементарная задачка
Всем привет, сам себе придумал задачу и не могу ее решить.
Суть : Верно ли, что это число содержит ровно три одинаковые цифры, как, например, числа 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, время: 06:43. |