javascript - 如何将对象插入另一个根数组内的数组中

标签 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),
  }

最佳答案

数组中的项目索引从 0length - 1,因此,如果您尝试访问索引 length 处的元素,将得到未定义。我们应该这样做:

...
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 初始化为 [[]] 并使用第一个版本。

关于javascript - 如何将对象插入另一个根数组内的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45256884/

相关文章:

javascript - 如果我的组件作为 React JS 中的子 Prop 传递给布局组件,如何访问布局组件中的 Prop ?

javascript - ReactJS setState 仅在嵌套在 setState 中时有效

javascript - 状态已保存,但表示未保存

javascript - knockout SelectedOptions 绑定(bind)到对象的属性失败

javascript - 为什么 Object.create 没有按预期克隆属性?

javascript - 为什么ajax下的javascript actionlink函数在mvc中不起作用

c - 将包含空格的文件中的数字加载到二维整数数组

javascript - 不一致的 JavaScript 函数结果

c - 将 rand() 的输出放入数组

python - 从数组值动态填充 numpy 矩阵?