Les clés de a et b sont toutes égales
diffObject(a, b) {
let before = [], after = []
Object.keys(a).forEach(key => {
if (a[key] !== b[key]) {
before.push({ ??? }) // 这里应该怎么写,{key: a[key]},但key不能是变量啊
after.push({ ??? })
}
})
return [before, after]
}
Ou existe-t-il un moyen meilleur, plus efficace et plus génial ?
L'effet que je veux obtenir est le suivant
const ob1 = {
name: '辣条',
color: '绿色',
length: 10,
}
const ob2 = {
name: '辣条',
color: '黄色',
length: 12,
}
const diff = diffObject(ob1, ob2)
console.log('diff[0]:', diff[0])
console.log('diff[1]:', diff[1])
// diff[0]: [{color: '绿色'}, {length: 10,}]
// diff[1]: [{color: '黄色'}, {length: 12,}]
La racine de ce problème est de savoir comment utiliser une variable comme clé lors de la déclaration d'un objet.
ES6 permet d'utiliser des littéraux lors de la définition d'objets, en utilisant
表达式
comme nom de propriété de l'objetRéponse après avoir modifié la description de la question
Si la variable est une chaîne ou un nombre
Si la variable est un objet
Ensuite, nous devons utiliser ES6 Map
Regardez le code. C'est facile à comprendre. C'est un sur-ensemble de la méthode précédente
.Capture d'écran
Nouvelle méthode d'écriture
Utilisez
reduce
Capture d'écran
Avant modification
Réalisé
Euh-huh. . Après avoir longuement lu la description du problème, je ne suis pas sûr de ce que vous voulez faire
Devinons en fonction du nom de la fonction et avant après. Voulez-vous mettre les différents attributs et valeurs de l'objet a et de l'objet b respectivement avant et après ? Si tel est le cas, vous pouvez consulter le code ci-dessous
Capture d'écran
En fait, votre question se résume à
cette question :
key sera analysée en une chaîne
"key"
, et la variable attendue estkey
, par exemplekey="abc",value="123"
Mais existe-t-il un moyen plus simple ?"key"
,期望是变量key
例当key="abc",value="123"
上述实际变成
{"key":"123"}
应该是{"abc":"123"}
最直接的答案是
var o = {}; o[key] = value; ret.push(o);
Ce qui précède devient en fait{"key":"123"}
et devrait être{"abc":"123"}
La réponse la plus directe est var o = {}; o[key] = value; ret.push(o);
Remarque : les réponses ci-dessus sont répertoriées par ordre chronologique. Aucune d'entre elles n'a été entièrement essayée. Veuillez tester attentivement avant de les utiliser. L'essentiel est d'apprendre les idées. Quant à la solution à choisir, j'espère la peser en fonction de la simplicité, des performances et de la lisibilité. Différentes personnes ont des opinions différentes
.
Ceci est le résumé d'une discussion dans un groupe QQ. Je ne suis qu'un porteur. 🎜ES6 prend en charge les propriétés des objets en tant que variables, la méthode d'écriture est :
Dans vos paramètres push, utilisez simplement cette méthode d'écriture.