0
votes

boucle à travers des chiffres scindés JavaScript

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);


6 commentaires

Votre question semble un peu compliquée et difficile à comprendre: pouvez-vous nous donner une combinaison de chiffres et de la sortie attendue ?


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) La valeur de retour devra être 400 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.


3 Réponses :


-2
votes

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


2 commentaires

Vous devriez utiliser Split 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.



0
votes

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])}`));


0 commentaires

0
votes

Je pense qu'il serait préférable de considérer cela mathématiquement, par opposition à l'ajout de 1 code> pour toujours jusqu'à ce que vous trouviez un numéro qui fonctionne.

La solution ci-dessous itière à travers chaque chiffre, augmentant-le. par 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>

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>

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);


0 commentaires