Je veux remplacer le nombre dans le myArray par "pair" ou "impair" mais cela génère une erreur qui TypeError: val.replace is not a function

const myArray = [
  [23, 156, 25, 10, 52, 23],

  [12, 100, 23, 56, 81, 93],

  [42.5, 71, 10, 23, 35, 11, 72, 99],

  [11, 100, 99, 102, 13, 8, 12]
];

let arr = myArray.map(item => {
  return item.map(val => {
    if (val % 2 == 0) {
      val.toString();
      val.replace(val, "even");
    } else {
      val.replace(val, "odd");
    }
  });
});

console.log(arr); //TypeError: val.replace is not a function
0
Peoray 23 mai 2018 à 15:07

3 réponses

Meilleure réponse

Vous n'avez pas besoin d'utiliser replace, il vous suffit de mapper

const myArray = [
  [23, 156, 25, 10, 52, 23],

  [12, 100, 23, 56, 81, 93],

  [42.5, 71, 10, 23, 35, 11, 72, 99],

  [11, 100, 99, 102, 13, 8, 12]
];

let arr = myArray.map(item => item.map(val => val % 2 == 0 ? 'even' : 'odd'))

console.log(arr);
0
Zohaib Ijaz 23 mai 2018 à 12:11

Vous pouvez essayer de suivre (Vérifiez la valeur si divisible par 0, si oui retournez pair sinon impair )

const myArray = [[23, 156, 25, 10, 52, 23], [12, 100, 23, 56, 81, 93], [42.5, 71, 10, 23, 35, 11, 72, 99], [11, 100, 99, 102, 13, 8, 12]];

let arr = myArray.map(item => item.map(val => val%2 === 0 ? "even": "odd"));

console.log(arr);

Ou vous pouvez améliorer votre code comme suit

const myArray = [[23, 156, 25, 10, 52, 23], [12, 100, 23, 56, 81, 93], [42.5, 71, 10, 23, 35, 11, 72, 99], [11, 100, 99, 102, 13, 8, 12]];

let arr = myArray.map(item => {
  return item.map(val => {
    if (val % 2 == 0) {
      val = val.toString(); // you need to reassign after toString
      val = val.replace(val, "even"); // you need to reassign after replace
    } else {
      val = val.toString(); // you need to reassign after toString
      val = val.replace(val, "odd"); // you need to reassign after replace
    }
    return val; // finally you need to return the updated value
  });
});

console.log(arr); //Now the right input will be logged
0
Nikhil Aggarwal 23 mai 2018 à 12:21

Vous devez renvoyer la nouvelle valeur.

String#replace renvoie une nouvelle chaîne avec les valeurs remplacées, mais vous n'avez pas de chaîne ici.

const myArray = [
  [23, 156, 25, 10, 52, 23],
  [12, 100, 23, 56, 81, 93],
  [42.5, 71, 10, 23, 35, 11, 72, 99],
  [11, 100, 99, 102, 13, 8, 12]
];

let arr = myArray.map(item => {
  return item.map(val => {
    if (val % 2 == 0) {
      return "even";
    } else {
      return "odd";
    }
  });
});

console.log(arr);
2
Nina Scholz 23 mai 2018 à 12:10