扩展运算符在对象的数组内分配数据

Posted

技术标签:

【中文标题】扩展运算符在对象的数组内分配数据【英文标题】:Spread operator to assign data inside array in an object 【发布时间】:2019-05-26 09:48:15 【问题描述】:

我需要使用扩展运算符更新以下状态内的数据。 必须这样做,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": ""
;

【问题讨论】:

“我需要...使用扩展运算符” - 为什么?请正确格式化您的问题/代码?到目前为止,您尝试过什么? ...也许...modifiedstate.data[0]["vehOn"]="Finance"??? @gaetanoM 我正在​​尝试使用扩展运算符来完成它。 @Andreas 我尝试了以下实现,但没有按预期工作。 :( 让 oldData = state.data[0]; 让 newData = 'vehOn':'finance'; 让 mergeData = ... oldData, ...newData; 让 mergeState1 = ...state.data , ...mergedData; //没用 let mergeState2 = ...state, data:[...state.data,mergedData]; //没用 但是为什么需要使用扩展运算符呢?如果您打算克隆 state,您应该知道扩展运算符不会进行浅拷贝。 【参考方案1】:

根据documentation,我能看到实现您的结果的唯一方法是:

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

如果您的意图是创建一个与 state 相同的对象并且您不知道 state 可以具有哪些属性,您应该寻找一种方法来 deep clone it

否则,如果您完全确定state 的结构并想做一个简单的克隆,您可以执行以下操作:

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

【讨论】:

以上是关于扩展运算符在对象的数组内分配数据的主要内容,如果未能解决你的问题,请参考以下文章

在道具分配中使用扩展运算符时React Native收到错误:“在这种环境下,分配的目标必须是一个对象

使用扩展运算符克隆带有数组的对象

扩展运算符

ES6-05:数组的扩展

在对象数组上使用扩展运算符来访问元素[重复]

typescript 扩展运算符的主要目标是扩展数组的对象。