当前位置: 首页 > 知识库问答 >
问题:

在ES6中使用spread语法进行深度复制

归鹤龄
2023-03-14

我正在尝试为我的Redux项目创建一个将使用对象而不是数组的深度复制映射方法。我读到在Redux中,每个状态都不应该改变前面状态中的任何东西。

export const mapCopy = (object, callback) => {
    return Object.keys(object).reduce(function (output, key) {

    output[key] = callback.call(this, {...object[key]});

    return output;
    }, {});
}
    return mapCopy(state, e => {

            if (e.id === action.id) {
                 e.title = 'new item';
            }

            return e;
        })
export const mapCopy = (object, callback) => {
    return Object.keys(object).reduce(function (output, key) {

    let newObject = {...object[key]};
    newObject.style = {...newObject.style};
    newObject.data = {...newObject.data};

    output[key] = callback.call(this, newObject);

    return output;
    }, {});
}

共有1个答案

梁鸣
2023-03-14

ES6没有内置这样的功能。我认为你有几个选择取决于你想做什么。

如果你真的想要深度复制:

  1. 使用库。例如,lodash具有CloneDeep方法。
  2. 实现您自己的克隆函数
mapCopy(state, e => {
  if (e.id === action.id) {
    return Object.assign({}, e, {
      title: 'new item'
    });
  } else {  
    return e;
  }
});

mapcopy现在可以非常简单了:

export const mapCopy = (object, callback) => {
  return Object.keys(object).reduce(function (output, key) {
    output[key] = callback.call(this, object[key]);
    return output;
  }, {});
}

本质上,mapcopy信任其调用方做正确的事情。这就是为什么我说这假设你控制所有呼叫站点。

 类似资料:
  • 本文向大家介绍ES6基础之展开语法(Spread syntax),包括了ES6基础之展开语法(Spread syntax)的使用技巧和注意事项,需要的朋友参考一下 展开语法用"..."进行表示,展开语法将可迭代的对象拆分成独立的值(语法层面展开)。扩展语法通常用于将可迭代的对象的值传递到函数的参数中。今天小编将从以下方面进行介绍: 函数传参中的应用 数组的相关应用 剩余参数的应用 函数传参中的应用

  • 问题内容: 下面的对象有一个嵌套对象 我应该如何在减速器中处理它? 我可以如上所述做吗?我只是将整个对象分配给它而不进行复制? 要么 还是应该对对象进行深层复制并将其分配给?谢谢 问题答案: 处理嵌套数据更新的“正确”方法是使用多个浅表副本,每个浅层副本一个。按照您的第一个示例,完全可以完全替换一个字段的新对象当然也可以。 有关如何正确执行不可变更新的一些信息,请参阅不可变更新模式的Redux文档

  • 译者:bdqfork 作者: Robert Guthrie 深度学习构建模块:仿射映射, 非线性函数以及目标函数 深度学习表现为使用更高级的方法将线性函数和非线性函数进行组合。非线性函数的引入使得训练出来的模型更加强大。在本节中,我们将学习这些核心组件,建立目标函数,并理解模型是如何构建的。 仿射映射 深度学习的核心组件之一是仿射映射,仿射映射是一个关于矩阵A和向量x,b的*f(x)*函数,如下所

  • 我将在我的框架中支持深度链接。我分析了很多教程,都详细介绍了通用链接和URL方案。 对于通用链接,我需要在关联域中托管apple应用程序站点关联文件。apple app site association文件包含team ID Bundle ID。它在框架中不可扩展。 对于URL方案,我们需要重定向到自定义URI方案。 除此之外,我正在寻找一个类似Android应用程序链接的解决方案。 有没有办法不

  • 本文向大家介绍深入浅析react native es6语法,包括了深入浅析react native es6语法的使用技巧和注意事项,需要的朋友参考一下 react native是直接使用es6来编写代码,许多新语法能提高我们的工作效率 解构赋值 这句代码是ES6 中新增的解构(Destructuring)赋值语句。准许你获取对象的多个属性并且使用一条语句将它们赋给多个变量。 上面的代码等价于: 再

  • 问题内容: 在Objective-C中,可以通过以下方式进行深度复制: 如何在Swift中进行深度复制? 问题答案: 深拷贝 您的示例不是在StackOverflow上讨论的深层副本。获得对象的真实深层副本通常需要 迅速复制 该协议是提供对象副本的Objective- C方法,因为一切都是指针,并且您需要一种管理任意对象副本生成的方法。对于Swift中的任意对象副本,您可以提供一个便利的初始化程序