Оператор Spread для назначения данных внутри массива в объекте - PullRequest
0 голосов
/ 28 декабря 2018

Мне нужно обновить данные в указанном ниже состоянии, используя оператор распространения.Это должно быть сделано так, чтобы data[0] было обновлено с "vehOn":"Finance"

let state = {
  "data": [{
    "year": "2017",
    "make": "ALFA ROMEO",
    "model": "ILX 4D 2.0 PREMIUM PACKAGE"
  }],
  "error": ""
};

Модифицированное состояние должно иметь вид:

let modifiedstate = {
  "data": [{
    "year": "2017",
    "make": "ALFA ROMEO",
    "model": "ILX 4D 2.0 PREMIUM PACKAGE",
    "vehOn": "Finance"
  }],
  "error": ""
};

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

Если вы намереваетесь создать объект, идентичный состоянию, и вы не знаете, какие свойства state могут иметь, вам следует искать способ его глубокого клонирования

В противном случае, если вы абсолютно уверены в структуре state и хотите сделать простой клон, вы можете сделать следующее:

   let modifiedstate = "data": [{
     ...state.data[0],
     "vehOn": "Finance"
     }],
     "error": ""
   }
0 голосов
/ 28 декабря 2018

const state = {
  "data": [{
    "year": "2017",
    "make": "ALFA ROMEO",
    "model": "ILX 4D 2.0 PREMIUM PACKAGE"
  }],
  "error": ""
};

console.log("---- state ----");
console.log(state);

const modifiedstate = { ...state,
  data: state.data.map((entry, i) => i === 0 ? ({ ...entry,
    vehOn: "Finance"
  }) : entry)
};

console.log("---- modifiedstate ----");
console.log(modifiedstate);
0 голосов
/ 28 декабря 2018

В соответствии с документацией единственный способ увидеть ваш результат - это:

let state = {
    "data": [{
        "year": "2017",
        "make": "ALFA ROMEO",
        "model": "ILX 4D 2.0 PREMIUM PACKAGE"
    }],
    "error": ""
};

let modifiedstate  = { "data": [{ ...state.data[0], ...{vehOn: "Finance"} }],
    "error": ""};

console.log(modifiedstate);
...