相关疑难解决方法(0)

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

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

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

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

javascript clone object

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

lodash和下划线之间的差异

为什么有人更喜欢lodash.jsunderscore.js实用程序库而不是另一个?

Lodash似乎是下划线的替代品,后者已经存在了更长时间.

我认为两者都很精彩,但我对他们如何努力进行有根据的比较并不了解,我想更多地了解这些差异.

javascript underscore.js lodash

1566
推荐指数
9
解决办法
31万
查看次数

你如何在Javascript中克隆一个对象数组?

...每个对象还引用同一数组中的其他对象?

当我第一次想出这个问题时,我就是这样的

var clonedNodesArray = nodesArray.clone()
Run Code Online (Sandbox Code Playgroud)

将存在并搜索有关如何在javascript中克隆对象的信息.我确实在StackOverflow上找到了一个问题(由同样的@JohnResig回答)他指出用jQuery你可以做的

var clonedNodesArray = jQuery.extend({}, nodesArray);
Run Code Online (Sandbox Code Playgroud)

克隆一个对象.我试过这个,但这只复制了数组中对象的引用.所以,如果我

nodesArray[0].value = "red"
clonedNodesArray[0].value = "green"
Run Code Online (Sandbox Code Playgroud)

nodesArray [0]和clonedNodesArray [0]的值都将变为"绿色".然后我试了一下

var clonedNodesArray = jQuery.extend(true, {}, nodesArray);
Run Code Online (Sandbox Code Playgroud)

哪个深层复制了一个Object,但我分别从Firebug和Opera Dragonfly 那里得到了" 过多的递归 "和" 控制堆栈溢出 "的消息.

你会怎么做?这是不应该做的事吗?在Javascript中是否有可重用的方法?

javascript

392
推荐指数
16
解决办法
32万
查看次数

Nodejs:如何克隆对象

如果我克隆一个数组,我会使用 cloneArr = arr.slice()

我想知道如何克隆nodejs中的对象.

javascript node.js

88
推荐指数
9
解决办法
7万
查看次数

使用扩展语法在ES6中进行深层复制

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

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

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

    return output;
    }, {});
}
Run Code Online (Sandbox Code Playgroud)

有用:

    return mapCopy(state, e => {

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

            return e;
        })
Run Code Online (Sandbox Code Playgroud)

但是它没有深层复制内部项目所以我需要调整它:

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;
    }, {});
}
Run Code Online (Sandbox Code Playgroud)

这不太优雅,因为它需要知道传递了哪些对象.ES6中是否有一种方法可以使用扩展语法来深度复制对象?

javascript ecmascript-6 spread-syntax redux

79
推荐指数
6
解决办法
8万
查看次数

JS:Object.assign()是否创建深拷贝或浅拷贝

我刚刚遇到了这个概念

var copy = Object.assign({}, originalObject);
Run Code Online (Sandbox Code Playgroud)

它会将原始对象的副本创建到" copy"对象中.但是,我的问题是,这种克隆对象的方式是创建深拷贝还是浅拷贝?

PS:令人困惑的是,如果它创建了一个深层副本,那么它将是克隆一个对象的最简单方法.

javascript object deep-copy shallow-copy

40
推荐指数
5
解决办法
2万
查看次数

带有循环引用的Javascript深度克隆对象

我从Dmitriy Pichugin 的现有答案中复制了下面的功能.此函数可以深度克隆对象而无需任何循环引用 - 它可以工作.

function deepClone( obj ) {
    if( !obj || true == obj ) //this also handles boolean as true and false
        return obj;
    var objType = typeof( obj );
    if( "number" == objType || "string" == objType ) // add your immutables here
        return obj;
    var result = Array.isArray( obj ) ? [] : !obj.constructor ? {} : new obj.constructor();
    if( obj instanceof Map )
        for( var key of obj.keys() )
            result.set( key, deepClone( …
Run Code Online (Sandbox Code Playgroud)

javascript clone circular-reference node.js

12
推荐指数
2
解决办法
8107
查看次数

如何在JavaScript中深层复制自定义对象?

我一直在这里冲浪一段时间,仍然没有找到适合我的答案.

有没有办法在JS中深层复制非普通对象?

我已经尝试了,jQuery.extend(true, {}, this)但它只克隆了一些,剩下的仍然是另一个对象的参考.

javascript clone object

11
推荐指数
2
解决办法
1万
查看次数

javascript中的重复对象

我看到两种复制对象的方法

1.

var a={c:1}
var b=a;
alert(b.c);//alert 1
Run Code Online (Sandbox Code Playgroud)

2.

var a={c:2};
var b={};
for (i in a)
{b[i]=a[i];} 
alert(b.c);//alert 1
Run Code Online (Sandbox Code Playgroud)

第一个比第二个短,那么第二个例子的效率是多少?

javascript object

7
推荐指数
2
解决办法
1万
查看次数

GWT到Javascript的转换

在javascript控制台中,如果我这样做,

   a = [1,2,3]
   Object.prototype.toString.call(a) // gives me "[object Array]"
   typeof a  // gives me "object"
Run Code Online (Sandbox Code Playgroud)

如果我在GWT中创建一个arraylist并将其传递给本机方法并执行此操作,

// JAVA code
   a = new ArrayList<Integer>();
   a.push(1);
   a.push(2);

   //JSNI code
    Object.prototype.toString.call(a) // gives me "[object GWTJavaObject]"
    typeof a // returns "function"
Run Code Online (Sandbox Code Playgroud)

两者之间究竟有什么区别?是GWTJavaObject完全同样

为什么在纯JavaScript中typeof返回" 对象 "而在GWT中返回" 功能 "?

总结问题是,在Javascript中转换为GWT对象究竟是什么?完整代码在这里.

      public void onModuleLoad()
        {
                List<Integer> list = new ArrayList<Integer>();
            list.add( new Integer( 100 ) );
            list.add( new Integer( 200 ) );
            list.add( new Integer( 300 ) …
Run Code Online (Sandbox Code Playgroud)

javascript gwt

7
推荐指数
1
解决办法
1653
查看次数