Si la valeur des clés prédéfinies est une chaîne vide, j'aimerais plutôt la remplacer par une valeur nulle.

Donc:

const foo = {
  first: '',
  second: 'bar',
  third: '',
  fourth: '',
  fifth: '',
}

Doit être normalisé à:

const foo = {
  first: null,
  second: 'bar',
  third: '',
  fourth: null,
  fifth: '',
}

Maintenant, l'exemple suivant fonctionne:

const normalize = (payload, keys) => {
  const clone = { ...payload }
  Object.entries(payload).forEach(([key, value]) => {
    if (keys.includes(key) && value === '') {
      clone[key] = null;
    }
  });
  return clone;
}

const foo = {
  first: '',
  second: 'bar',
  third: '',
  fourth: '',
  fifth: '',
}

console.log(normalize(foo, ['first', 'third']));

Mais la variable «clone» n'est pas si avisée.

Il existe désormais une méthode couramment utilisée en utilisant Object.assign ().

Est-il possible de faire cela?

0
Remi 27 août 2020 à 00:36

4 réponses

Meilleure réponse

Autre approche en boucle sur le tableau d'arguments de clés. Inutile de boucler sur toutes les clés de l'objet plutôt que sur celles requises

const normalize = (payload, keys) => {
  return keys.reduce((a, k) => {
    (a[k] === '') && (a[k] = null)
    return a;
  }, { ...payload })
}

const foo = {
  first: '',
  second: 'bar',
  third: '',
  fourth: '',
  fifth: '',
}

console.log(normalize(foo, ['first', 'third']));
3
charlietfl 26 août 2020 à 21:58

Que dis-tu de ça?

Reportez-vous à vos clés dans norm, renvoyez le nouveau mappage comme null si elle doit être normalisée sinon la chaîne vide elle-même.

const foo = {
  first: '',
  second: 'bar',
  third: '',
  fourth: '',
  fifth: '',
}, norm = ['third', 'fifth'];

const normalize = (payload, keys) => {
    return keys.reduce((a, k) => a[k] === "" && (a[k] = null) || a, {...payload})
}

Production:

const norm = ['third', 'fifth'];
normalize(foo, norm)

{first: "", second: "bar", third: null, fourth: "", fifth: null}
0
Abhilash 26 août 2020 à 23:19

Vous pouvez utiliser itérer avec for...in et vérifier si la clé correspond à some()

const foo = {
  first: '',
  second: 'bar',
  third: '',
  fourth: '',
  fifth: '',
}

const normalize = ({...obj}, arr) => {
  for (let key in obj) {
    if(arr.some(k => k === key)) {
      obj[key] = null;
    }
  }

  return obj;
}

console.log(normalize(foo, ['third', 'fifth']));
0
zb22 26 août 2020 à 22:08

Pourquoi ne pas parcourir le tableau et faire muter l'objet

const foo = {
  first: '',
  second: 'bar',
  third: '',
  fourth: '',
  fifth: '',
}


function normalize(obj, arr) {
const newObj={...obj}
  for (let i = 0; i < arr.length; i++) {
    newObj[arr[i]] = null;
  }
  return newObj;
}
console.log(normalize(foo, ['first', 'third']));
0
Eugen Sunic 26 août 2020 à 21:59