J'utilise Object.assign pour obtenir une nouvelle copie d'un objet avec des propriétés ajoutées à partir d'une autre carte. C'est généralement aussi simple que Object.assign (existingObject, {"new_key", "new_value"}), mais lorsque "new_key" se présente sous la forme d'une variable, je dois utiliser une variable temporaire. Comment éviter cela?

Un exemple simple:

function demo(inputKey, inputValue) {
    let data = {
        "existing_key": "existing_value"
    }
    let newData = {}
    newData[inputKey] = inputValue
    return Object.assign(data, newData)
}
//demo("new_key", "new_value")
//returns Object {existing_key: "existing_value", new_key: "new_value"}

Toute astuce sur la façon d'éviter la variable temporaire newData serait appréciée!

(Je travaille beaucoup avec des réducteurs dans Redux, ceci étant très utile pour copier des objets au lieu de les muter.)

0
Bronk-End 8 mars 2016 à 15:13

3 réponses

Meilleure réponse

Vous pouvez le faire dans ES2015 en utilisant les noms de propriété calculés:

return Object.assign(data, {[inputKey]: inputValue})
0
James Thorpe 8 mars 2016 à 12:18

Vous pouvez forcer l'utilisation d'une variable comme clé dans les littéraux d'objet si vous l'entourez de crochets:

function demo(inputKey, inputValue) {
    let data = {
        "existing_key": "existing_value"
    }
    let newData = {[inputKey] : inputValue}
    //newData[inputKey] = inputValue
    return Object.assign(data, newData)
}


console.log( demo('one',42) )
0
maioman 8 mars 2016 à 12:21

Vous créez déjà un nouvel objet données , pas besoin d'en créer un autre.

function demo(inputKey, inputValue) {
    let data = {
        "existing_key": "existing_value"
    }

    data[inputKey] = inputValue;

    return data;
}
0
Carlos Ruana 17 janv. 2017 à 10:37