J'ai cette fonction, je veux boucler à la fois à la fois des cordes et Recevez une valeur de retour pour comparer ce qui est le plus proche de celui-ci - c'est-à-dire (comparaison +1), mais uniquement si aucun de ses chiffres n'est égal à l'un des chiffres de la recherche. Si l'un des chiffres de comparaison est égal à l'un quelconque des chiffres de SearchNumber, j'ai besoin de nageoires la première valeur plus grande que celle de comparer que ce n'est égal à aucun des chiffres de recherche.
p>
function compareNumbers(searchNumber, compareNumber){
var isEqual = true;
var digitsCompare = compareNumber.toString().split('');
searchNumber.toString().split('').forEach(function(num,index) {
if(!(num===digitsCompare[index])){
isEqual = false;
}
});
return isEqual;
}
var b = compareNumbers(123,124);
console.log(b);
var d = compareNumbers(123,123);
console.log(d);3 Réponses :
Vous n'avez pas besoin de diviser une chaîne pour accéder à son contenu en tant que tableau.
var digitsCompare = compareNumber.toString(); console.log(digitsCompare.charAt(0)); <-- first char
Vous devriez utiliser Split code> si vous vouliez renvoyer un tableau sur lequel vous pourriez itérer.
Je ne suis pas sûr que cela se déplace vraiment sur une solution.
Le code est ci-dessous:
p>
function compareNumbers(searchNumber, compareNumber) {
//error check the args
var searchString = searchNumber + "";
var compareString = compareNumber + "";
if (compareString.length === 0) return "nope";
var compareInt = parseInt(compareString) + 1;
if (searchString.length === 0) {
return compareInt;
}
//don't crash the app
if (searchString.length >= 10
&& searchString.indexOf("0") >= 0 && searchString.indexOf("1") >= 0
&& searchString.indexOf("2") >= 0 && searchString.indexOf("3") >= 0
&& searchString.indexOf("4") >= 0 && searchString.indexOf("5") >= 0
&& searchString.indexOf("6") >= 0 && searchString.indexOf("7") >= 0
&& searchString.indexOf("8") >= 0 && searchString.indexOf("9") >= 0 ) {
return "nope";
}
while(containsDigits(searchString, compareInt)) {
compareInt++;
}
return compareInt;
}
function containsDigits(digits, intVal) {
var strVal = intVal + "";
var strDigits = digits + "";
for(var i = 0; i < strDigits.length; i++) {
if (strVal.indexOf(strDigits.charAt(i)) >= 0) {
return true;
}
}
return false;
}
// Examples
pairs = [[123, 124], [11, 13], [25, 35], [15, 21], [138, 546], [1, 2], [1, 1]];
pairs.forEach((pair) => console.log(`Compare [${pair[0]}, ${pair[1]}]: ${compareNumbers(pair[0], pair[1])}`)); Je pense qu'il serait préférable de considérer cela mathématiquement, par opposition à l'ajout de La solution ci-dessous itière à travers chaque chiffre, augmentant-le. par pense à cela comme une serrure de combinaison, sauf dès que vous tournez un cadran, tous les Ceux après avoir réinitialisé au nombre le plus bas, nous sommes autorisés à utiliser. p> p> 1 code> pour toujours jusqu'à ce que vous trouviez un numéro qui fonctionne. 1 code> jusqu'à ce que nous trouvions un chiffre, nous sommes autorisés à utiliser. Une fois que nous avons effectué ce changement, nous savons que le reste des chiffres sera remplacé par le nombre le plus bas disponible pour nous. P> function compareNumbers(n1, n2) {
var n1Array = ("" + n1).split("").map(Number);
var n2Array = ("" + n2).split("").map(Number);
var availableNumbers = [...Array(10).keys()].filter(n => !n1Array.includes(n));
//Loop through each digit in our compare string
n2Array.some((n, index) => {
let originalN = n;
//Increment it until we have a valid number
while (!availableNumbers.includes(n))
if (n < 9) n++
else {
//If we've passed 9, then we need to use the lowest number *twice*
//However, if we're changing the first number, we CAN'T replace it with a 0
n = Number((index === 0 ? availableNumbers[0] || availableNumbers[1] : availableNumbers[0]).toString() + availableNumbers[0]);
break;
}
if (originalN !== n) {
n2Array[index] = n;
var replacements = n2Array.splice(index + 1).map(n => availableNumbers[0]);
n2Array = [...n2Array, ...replacements];
return true; //Exit early
}
return false; //Keep iterating
});
//Turn [4,0,0] into 400
return Number(n2Array.join(""));
}
let result1 = compareNumbers(123,124);
console.log(result1);
let result2 = compareNumbers(123,423);
console.log(result2);
Votre question semble un peu compliquée et difficile à comprendre: pouvez-vous nous donner une combinaison de chiffres et de la sortie attendue i>?
Avez-vous d'autres exemples?
Pour ex. Si SearchNumber = 11 et comparer = 13, j'ai besoin d'une valeur de retour pour comparerenber, ce qui est la valeur plus large la plus proche que 13, mais aucun de ses chiffres ne doit être égal aux chiffres de la recherche. (Résultat ici devrait être 20);
Dans votre exemple
Comparenumbers (123, 124) Code> La valeur de retour devra être400 code> puisque toutes les valeurs de 123 à 399 ont tous un "1", "2", ou un '3' dans les chiffres? Est-ce exact?Fondamentalement, je veux iTerrer en comparaison et ajouter 1 -> if (SearchNumber.tostring (). Split ()! == Comparenumber.Tostring (). Split ().
@ jwatts1980 c'est vrai.