Javascript 更新数组,但在映射中保留现有数组

Javascript 更新数组,但在映射中保留现有数组,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,如何使用map更新第一项时间 const myArr = [{ day: 1, time: [1200, 1400] }] newTime = 1300; myNewArr = myArr.map(d => { return { day: d.day, time: [newTime] // but this don't care about order } }) console.log(myNewArr) 哪一个是1200,换成1300,但保留1400作

如何使用map更新第一项时间

const myArr = [{
  day: 1,
  time: [1200, 1400]
}]

newTime = 1300;
myNewArr = myArr.map(d => {
  return {
    day: d.day,
    time: [newTime] // but this don't care about order
  }
})
console.log(myNewArr)

哪一个是1200,换成1300,但保留1400作为第二项?反之亦然,用另一个数字替换1400。

考虑到您不想更新原始数组,您可以使用slice with
spread syntax
来更新数据,如

const myArr=[{
日期:1,
时间:[12001400]
}]
新时间=1300;
myNewArr=myArr.map(d=>{
返回{
日期:d.day,
时间:[newTime,…d.time.slice(1)]
}
})
log(myNewArr)
您可以使用并获取具有所需索引的对象进行替换

var myArr=[{day:1,time:[12001400]}],
新时间=1300,
myNewArr=myArr.map(
({day,time})=>({day,time:Object.assign([],time,{0:newTime})})
);

console.log(myNewArr)为什么不直接使用
myArr[0]。时间[0]=1300
?使用
spread
运算符instead@T.J.Crowder,对不起,我的Part中的单词选择错误如果我想更新第二个数组而不是第一个数组,我是否必须更改此行中的任何内容?
time:[newTime,…d.time.slice(1)]
[…d.time.slice(0,index),newTime,…d.time.slice(index+1)]
如果index是要更新的索引,此语法将使用索引0作为well@SharonChai:可读性较差,效率较低。但对于您问题中的index-0情况,spread会很好且可读(但由于临时数组的存在,其效率仍然低于Nina的
assign
)。效率很少那么重要。您必须处理大量数组,或者大量执行操作。:-)哇,我不知道它可以像那样获取索引,我不能使用spread操作符来实现这一点,对吗?