如何将对象推入另一个根数组中的数组

时间:2017-07-22 16:38:32

标签: javascript arrays reactjs redux lodash

我正在使用GPS相关程序,因此我正在积极接收许多位置对象。这是我想要实现的数组形式。最初它应该是一个空数组,然后只从一个子节点开始,所有传入的位置对象都将存储在该子节点中,直到发出其他命令。当下一个事件开始时,所有传入的对象都将存储在第二个子数组中,希望您能获得要点。

rootArray = [
  [
    {lat: '', long: ''},
    {lat: '', long: ''},
    {lat: '', long: ''},
  ],
  [
    {lat: '', long: ''},
    {lat: '', long: ''},
    {lat: '', long: ''},
  ]
]

这是我尝试但没有成功的。

// I am working with redux here actually
// rootArray: []

case NEW_LOCATION_OBJECT_COMING:
  return {
    ...state,
    rootArray: state.rootArray[state.rootArray.length].concat(action.payload.locationObject),
  }

1 个答案:

答案 0 :(得分:2)

数组中的项目已从0索引到length - 1,因此,如果您尝试访问索引为length的元素,则会获得undefined。我们应该这样做:

...
rootArray: [
  ...state.rootArray.slice(0, state.rootArray.length - 1),
  state.rootArray[state.rootArray.length - 1].concat(action.payload.locationObject)
],
...

原因在于,通过前一种方法,我们将rootArray的最后一个元素与有效负载连接起来,所以其他一切都会丢失,而rootArray只会变得简单对象数组。

我们需要通过扩展现有数组来保留我们所拥有的东西,为此我创建了一个看起来像旧rootArray而没有最后一个元素的新数组,新的最后一个元素就是旧的连接最后一个元素和有效负载。我希望这是有道理的。

修改 鉴于你的评论,这取决于你如何启动rootArray如果它只是一个空数组,那么这种方法会失败,而你应该这样做:

...
rootArray: [
  ...state.rootArray.slice(0, state.rootArray.length - 1),
  state.rootArray.length > 0
    ? state.rootArray[state.rootArray.length - 1].concat(action.payload.locationObject)
    : [...action.payload.locationObject]
],
...

否则,您只需启动rootArray[[]]并使用第一个版本。