обновить свойство объекта без перезаписи - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть метод, который принимает два параметра key для имени свойства и value для значения свойства. И когда я использую его, я хочу обновить data[key] и добавить туда столько значений, сколько я вызываю метод setData. Мне не нужно переписывать значение с тем же key, но обновить его и добавить новое, чтобы конечный объект мог выглядеть так:

{
    patients:
       formValue: […],
       filtersValue: {}
}

текущая реализация:

const data = {}

setData(key, value) {
  Object.assign(this.data[key] = {}, value);
}


setData(this.stateName, { firstItemsValue: this.itemsCopy });
setData(this.stateName, { secondItemsValue: this.itemsCopy });

Ответы [ 5 ]

0 голосов
/ 15 ноября 2018

Решение:

setData(key, value) {
  this.data[key] = { ...this.data[key], ...value };
}
0 голосов
/ 15 ноября 2018

Проверьте это решение

const data = {}
var fun = (key, value)=>{

data[key] = value;
}
fun('kk',123);
console.log(data); 
0 голосов
/ 15 ноября 2018

Вы упомянули, что хотите добавить столько значений, сколько вы вызываете setData. Это звучит как работа для массива.

Вы можете использовать следующий код:

function setData(targetObj, propName, valueToAdd){

    if(typeof targetObj[propName] === 'undefined'){
        targetObj[propName] = [];
    }
    if(Array.isArray(targetObj[propName])){
        targetObj[propName].push(valueToAdd);
    }else{
         console.log('property '+propName +' already exists and is not an array');
    }
}
0 голосов
/ 15 ноября 2018

То, что вы пытаетесь сделать, это реализовать HashMap или словарь.

Я бы просто сделал это так:

function setData(key, value) 
{
    if (data[key])
        data[key].push(value)
    else  
        data[key] = [ value ]
}
0 голосов
/ 15 ноября 2018

Используйте вот так:

const data = {}

setData(key, value) {
  Object.assign(data, {[key]: value});
}

Кстати, вы можете просто установить данные как:

setData(key, value) {
  data[key] = value
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...