Оператор Spread для назначения данных внутри массива в объекте

Мне нужно обновить данные внутри приведенного ниже состояния, используя оператор распространения. Это должно быть сделано так, чтобы 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 ответа

Решение

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

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);

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);

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

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

   let modifiedstate = "data": [{
     ...state.data[0],
     "vehOn": "Finance"
     }],
     "error": ""
   }
Другие вопросы по тегам