Найти все цифры из массива в числе
Приветствую!
Собстно, сабж. Есть функция 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, время: 10:17. |