相关疑难解决方法(0)

在JavaScript中深度克隆对象的最有效方法是什么?

克隆JavaScript对象的最有效方法是什么?我已经看到obj = eval(uneval(o));被使用,但这是非标准的,只有Firefox支持.

我做过类似的事情,obj = JSON.parse(JSON.stringify(o));但质疑效率.

我也看到了具有各种缺陷的递归复制功能.
我很惊讶没有规范的解决方案.

javascript clone object

5181
推荐指数
48
解决办法
189万
查看次数

如何正确克隆JavaScript对象?

我有一个对象,x.我想把它复制为对象y,这样改变y就不要修改了x.我意识到复制从内置JavaScript对象派生的对象将导致额外的,不需要的属性.这不是问题,因为我正在复制我自己的一个文字构造的对象.

如何正确克隆JavaScript对象?

javascript clone javascript-objects

2922
推荐指数
42
解决办法
176万
查看次数

如何深度合并而不是浅合并?

无论Object.assign对象传播只能做一浅合并.

问题的一个例子:

// No object nesting
const x = { a: 1 }
const y = { b: 1 }
const z = { ...x, ...y } // { a: 1, b: 1 }
Run Code Online (Sandbox Code Playgroud)

输出是你所期望的.但是如果我试试这个:

// Object nesting
const x = { a: { a: 1 } }
const y = { a: { b: 1 } }
const z = { ...x, ...y } // { a: { b: 1 } }
Run Code Online (Sandbox Code Playgroud)

代替

{ a: …
Run Code Online (Sandbox Code Playgroud)

javascript spread-syntax

289
推荐指数
22
解决办法
14万
查看次数

React:如何在setState上更新state.item [1]?(用JSFiddle)

我正在创建一个用户可以设计自己的表单的应用程序.例如,指定字段的名称以及应包含哪些其他列的详细信息.

该组件在此处作为JSFiddle提供.

我的初始状态如下:

var DynamicForm = React.createClass({
  getInitialState: function() {
   var items = {};
   items[1] = { name: 'field 1', populate_at: 'web_start',
                same_as: 'customer_name',
                autocomplete_from: 'customer_name', title: '' };
   items[2] = { name: 'field 2', populate_at: 'web_end',
                same_as: 'user_name', 
                    autocomplete_from: 'user_name', title: '' };

     return { items };
   },

  render: function() {
     var _this = this;
     return (
       <div>
         { Object.keys(this.state.items).map(function (key) {
           var item = _this.state.items[key];
           return (
             <div>
               <PopulateAtCheckboxes this={this}
                 checked={item.populate_at} id={key} 
                   populate_at={data.populate_at} />
            </div>
            ); …
Run Code Online (Sandbox Code Playgroud)

javascript state reactjs

215
推荐指数
11
解决办法
25万
查看次数

如何在javascript中深度克隆

你如何深度克隆Javascript对象?

我知道基于类似的框架有各种各样的功能JSON.parse(JSON.stringify(o)),$.extend(true, {}, o)但我不想使用这样的框架.

什么是创建深度克隆的最优雅或最有效的方法.

我们关心像克隆数组这样的边缘情况.不打破原型链,处理自我引用.

我们不关心支持复制DOM对象,因为因为.cloneNode这个原因而存在.

由于我主要想使用深度克隆来node.js使用V5引擎的ES5功能是可以接受的.

[编辑]

在任何人建议让我提及之前,通过原型继承对象并克隆它来创建副本之间存在明显差异.前者使原型链变得混乱.

[进一步编辑]

在阅读完答案后,我发现了一个令人讨厌的发现,即克隆整个物体是一个非常危险和困难的游戏.以下面的基于闭包的对象为例

var o = (function() {
     var magic = 42;

     var magicContainer = function() {
          this.get = function() { return magic; };
          this.set = function(i) { magic = i; };
     }

      return new magicContainer;
}());

var n = clone(o); // how to implement clone to support closures
Run Code Online (Sandbox Code Playgroud)

有没有办法编写克隆对象的克隆函数,在克隆时具有相同的状态,但是如果不在oJS中编写JS解析器,则无法改变状态.

这样的功能不再需要现实世界.这仅仅是学术兴趣.

javascript

95
推荐指数
6
解决办法
10万
查看次数