如何仅更新关联数组中嵌套对象的一个特定属性

1110

我有关联数组。
这是一个键(数字)和值(对象)。
我需要保持此数组的状态不变,因为我只需要更新一个对象属性。
数组示例:

5678: {OrderId: 1, Title: "Example 1", Users: [{UserId: 1}, {UserId: 2}, {UserId: 3}]}
5679: {OrderId: 2, Title: "Example 2", Users: [{UserId: 1}, {UserId: 2}, {UserId: 3}]}

我需要更新Users数组属性。
我尝试了这个,但是不起作用:

ordersAssociativeArray: {
        ...state.ordersAssociativeArray,
        [action.key]: {
          ...state.ordersAssociativeArray[action.key],
          Users: action.updatedUsers
        }
      }

这是减速器中的数据。
我做错了如何解决此问题?

可能会有所帮助。
当我检查chrome中的值时,我在执行上述代码后检查先前的值和值:
在之前:

ordersAssociativeArray:Array(22) > 5678: Order {OrderId: ...}

后:

ordersAssociativeArray: > 5678: {OrderId: ...}



解决方案(我的Reducer中的代码)

let temp = Object.assign([], state.ordersAssociativeArray);
temp[action.key].Users = action.updatedUsers;
return {
      ...state,
      ordersAssociativeArray: temp
}

因此,这段代码可以正常工作。但是我还是不明白为什么?所以我有解决方案,但想请问有人能解释一下为什么这种方法行得通,而首先不能行吗?
如果这可以帮助我如何将对象初始放置在此关联数组中:

ordersAssociativeArray[someID] = someObject // this object is created by 'new Order(par1, par2 etc.)'
齐吉

正如这个小提琴所证明的,您在做什么是正确的您的代码中的其他地方可能存在问题。

我建议您将减速器分为两个功能,ordersReducerorderReducer这样,您将避免过多使用点,这可能导致您怀疑代码的正确性。

例如,类似:

const ordersReducer = (state, action) => {
  const order = state[action.key]

  return {
    ...state,
    [action.key]: orderReducer(order, action)
  }
}

const orderReducer = (state, action) => {
  return {
    ...state,
    Users: action.updatedUsers
  }
}

希望您能找到您的错误!

更新资料

在您的解决方案中,您可以使用let temp = Object.assign([], state.ordersAssociativeArray);很好,但是我想您应该知道,{}即使在按数字编制索引时,有时最好还是使用偶数。

javascript中的数组不适用于表示规范化数据,因为如果缺少id,js数组仍将undefined在该索引处有一个条目。例如,

const orders = []
array[5000] = 1 // now my array has 4999 undefined entries

另一方面,如果您使用带有整数键的对象,则会得到紧密包装的条目。

const orders = {}
orders[5000] = 1 // { 5000: 1 } no undefined entries

这是一篇关于在redux中标准化状态形状的文章请注意,它们是如何从使用原始示例中的数组迁移到具有键之类的对象的users1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从关联数组的数组中获取一个属性的唯一值

PHP,从多维数组中的多个关联数组中回显一个特定值

如何制作一个唯一的关联数组?

在Bash中访问JSON对象-关联数组/列表/另一个模型

如何基于另一个数组中的条件从关联数组中提取?

如何在一个数组中获取多维关联数组键?

如何遍历一个关联数组并获取密钥?

如何创建一个复杂的多维关联数组?

在Rust中创建一个关联数组

在jQuery中创建一个关联数组

javascript 中的关联数组是一个错误?

另一个对象的值作为Javascript中另一个关联数组中的值

如何在PHP中检测关联数组迭代中的最后一个元素

我想从一个JavaScript对象列表中获得一个关联数组

如何将具有相同键的两个对象(关联数组)合并到一个对象中

如何在php中创建一个空白的关联数组

如何动态更新数组中另一个对象内的嵌套对象?

如何在Redux状态的嵌套数组中仅更新一个值?

在JavaScript中将两个不同的关联数组放入一个关联数组中,并将其中的两个关联数组

如何在 MongoDB 中的另一个嵌套数组中更新嵌套数组中的对象

findOneAndUpdate-更新数组中具有特定属性的第一个对象

如何通过继续增加键将关联添加到另一个关联数组中?

如何在mongodb的对象中更新我的另一个嵌套数组的嵌套数组

将关联数组添加到PHP中的另一个关联数组

如何为Meteor集合/ minimongo中的一个文档更新数组中多个对象的属性?

如何仅观察数组中的一个对象?

如何将两个列表与键值合并到一个关联数组中

如何将2个数组合并为一个关联数组

使用一个关联数组中的值来测试另一个关联数组中的值