具有相同键的子项:Object.assign vs _.merge

时间:2017-04-10 19:42:14

标签: reactjs redux lodash

我想知道我是否完全理解了javascript中赋值和合并之间的区别。每当以下reducer更新状态时,我都会收到Encountered two children with the same key错误

function updateKeyframes(state, action) {
  const { keyframeIds, props } = action.payload;

  const newKeyframes = _.map(keyframeIds, function(id) {
    return _.merge(state.keyframes[id], props);
  });

  return Object.assign({}, state, {
     keyframes: Object.assign({}, state.keyframes, newKeyframes)
  });
}

但是,如果我以不同的方式计算newKeyframes,则错误消失。

const newKeyframes = keyframeIds.reduce((memo, keyframeId) =>
Object.assign({}, memo, {
 [keyframeId]: Object.assign({}, state.keyframes[keyframeId], props)
}), {});

为什么呢?这是怎么回事?

1 个答案:

答案 0 :(得分:1)

在您的第一个示例中,newKeyframes是一个数组。在第二个示例中,newKeyFrames是一个对象。那时有一个明显的区别:

 Object.assign({}, state.keyframes, newKeyframes)

如果newKeyFrames是一个数组,那么密钥替换可能会按预期进行。