05.07.2016, 14:16
|
Интересующийся
|
|
Регистрация: 05.07.2016
Сообщений: 15
|
|
Вроде элементарная задачка
Всем привет, сам себе придумал задачу и не могу ее решить.
Суть :
Верно ли, что это число содержит ровно три одинаковые
цифры, как, например, числа 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, помогите пожалуйста.
|
|
05.07.2016, 14:20
|
Интересующийся
|
|
Регистрация: 05.07.2016
Сообщений: 15
|
|
Я понимаю что все дело в
if(counter >=3){
arr.push(a);
Но не врубаюсь куда я его должен правильно вставить
|
|
05.07.2016, 14:30
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
hujak_hujak,
Пожалуйста, отформатируйте свой код!
Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]
О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
|
|
05.07.2016, 14:37
|
|
Профессор
|
|
Регистрация: 26.04.2011
Сообщений: 472
|
|
|
|
05.07.2016, 14:42
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
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))
|
|
05.07.2016, 14:51
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
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));
Последний раз редактировалось Dilettante_Pro, 05.07.2016 в 14:53.
|
|
05.07.2016, 15:28
|
Интересующийся
|
|
Регистрация: 05.07.2016
Сообщений: 15
|
|
Спасибо большое, а насчет "было уже", сорри, я тут новенький, буду знать
|
|
05.07.2016, 16:18
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
Мой маленький велосипед
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));
Последний раз редактировалось Vlasenko Fedor, 05.07.2016 в 17:06.
|
|
05.07.2016, 19:26
|
|
Профессор
|
|
Регистрация: 18.05.2011
Сообщений: 1,207
|
|
Ещё вариант для полноты картины
<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>
|
|
05.07.2016, 23:46
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
вариантов может быть очень много
var temp = {};
alert(JSON.stringify(('' + 34342224).split('').filter(function (a) {
return temp[a] = ++temp[a] || 1, temp[a] == 3;
})));
Последний раз редактировалось Vlasenko Fedor, 05.07.2016 в 23:53.
|
|
|
|