Найти все цифры из массива в числе
Приветствую!
Собстно, сабж. Есть функция isContains(number, array). Number - натуральное число, array - простой массив из цифр. Для number состоящих только из цифр array возвращать true, иначе false. alert(isContains(449, [4,9])); //true alert(isContains(134, [1,3])); //false alert(isContains(18, [8,1])); //true alert(isContains(18, [7,1])); //false alert(isContains(3, [1,3])); //false Я попробовал реализовать, но спотыкаюсь на числах типа isContains(149, [4,9]);
function isContains(number, array) {
var numberArray = String(number).split('');
return array.every(function(elem){
if (String(number).indexOf(elem) != -1) {
return numberArray.some(function(nElem){
if(Number(nElem) === elem) return true;
});
}
});
}
Подскажите, пожалуйста, куда копать. :-? |
Возвращаем массив совпадений (вообще нун ещё фильтровать и идентичные цифры, дабы не было повторов, - не делал)
function isContains(number, array) {
var dig = number.toString(), outArr ;
return outArr = array.filter(function(num) {
return dig.indexOf(num)!=-1;
});
}
alert(isContains(149, [4,9]))
https://learn.javascript.ru/array-iteration |
rand01m,
function isContains(number, array) {
var numberArray = String(number).split('');
return numberArray.every(function(elem){
return array.indexOf(+elem) != -1
});
}
alert(isContains(449, [4,9]) );
//true
alert(isContains(134, [1,3] ));
//false
alert(isContains(18, [8,1]) );
//true
alert(isContains(18, [7,1]) );
//false
|
Deff,
:blink: |
рони,
Наверно я недопонял задачку(глянул лишь на название темы, оттель и плясал) |
Цитата:
alert(isContains(3, [1,3]) ); //true :( |
Цитата:
//false :( |
function isContains(number, array) {
var dig = number.toString(), outArr ;
outArr = array.filter(function(num) {
return dig.indexOf(num)!=-1;
});
return outArr.join(',')==array.join(',');
}
alert(isContains(449, [4,9]))
alert(isContains(3, [1,3]) );
Но всё одно изврат, пользуйте код от рони |
Цитата:
alert(isContains(134, [1,3]) ); //true У рони 3 не проходит проверку. |
rand01m, поправил cравнение:
function isContains(number, array) {
var dig = number.toString(), outArr ;
outArr = array.filter(function(num) {
return dig.indexOf(num)!=-1;
});
return JSON.stringify(outArr)==JSON.stringify(array);
}
alert(isContains(449, [4,9]))
alert(isContains(3, [1,3]) );
|
Цитата:
//true з.ы. список проверок в первом посте. |
function isContains(number, array) {
if(typeof(number)!="number") return false;
var dig = number.toString().split(''), obj ={},obj2 ={};
array.forEach(function(item) {
if(typeof(item)!="number") return false;
obj[item] =1;
if(dig.indexOf(''+item)!=-1)obj2[item]=1;
});
dig.forEach(function(item) {if(!obj2[item]) obj2[item]=0;});
return JSON.stringify(obj)==JSON.stringify(obj2);
}
alert(isContains(449, [4,9]));
//true
alert(isContains(134, [1,3]));
//false
alert(isContains(18, [8,1]));
//true
alert(isContains(18, [7,1]));
//false
alert(isContains(3, [1,3]));
//false
|
rand01m,
function isContains(number, array) {
var numberArray = String(number).split('');
return numberArray.every(function(elem) {
return array.indexOf(+elem) != -1
}) && array.every(function(elem) {
return numberArray.indexOf('' + elem) != -1
});
}
alert(isContains(449, [4, 9]));
//true
alert(isContains(134, [1, 3]));
//false
alert(isContains(18, [8, 1]));
//true
alert(isContains(18, [7, 1]));
//false
alert(isContains(3, [1, 3]));
//false
|
Ребят, большое спасибо!
з.ы. В сети видел чуть другой алгоритм - брать остаток от деления проверяемого числа на 10, проходясь по массиву. Если остаток не соответствует текущему элементу массива, то элемент выпиливается. В итоге, функция возвращает сравнение нуля и длины обработанного массива. Если все цифры из проверочного массива есть в проверяемом числе, то естественно, конечный массив будет пуст, длина нулевой, что есть true, иначе false. |
| Часовой пояс GMT +3, время: 03:28. |