更新数组但保留映射中的现有数组

时间:2018-04-05 07:17:09

标签: javascript reactjs ecmascript-6

如何使用地图更新第一项时间?

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。

2 个答案:

答案 0 :(得分:4)

您可以使用Object.assign并使用想要的索引替换对象。



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

console.log(myNewArr);




答案 1 :(得分:3)

考虑到您不想更新原始数组,可以使用带spread syntax的切片来更新数据,如



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

newTime = 1300;
myNewArr = myArr.map(d => {
  return {
    day: d.day,
    time: [newTime, ...d.time.slice(1)]
  }
})
console.log(myNewArr)




请注意,映射数据和更新如上所述将更新整个对象列表。

您可以使用Object.assign代替传播语法,因为@NinaScholz也建议,这样您就可以更新任何特定索引。它来自于数组接受整数索引

的事实



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

newTime = 1300;
myNewArr = myArr.map(d => {
  return {
    day: d.day,
    time: Object.assign([], time, {1: newTime})
  }
})
console.log(myNewArr)