3

使用下面的函数来深度克隆一棵树,

function clone_map(obj){
    return obj.map(function(val){
        return typeof(val) == "object" ? clone_map(val) : val;
    });
};
function clone_forin(obj){
    var result = [];
    for (var key in obj){
        var val = obj[key];
        result.push(typeof(val) == "object" ? clone_forin(val) : val);
    };
    return result;
};
function clone_json(obj){
    return JSON.parse(JSON.stringify(obj));
};

JSON 是我测试中最快的。为什么?还有更好的选择吗?

4

1 回答 1

4

从后续测试中可以看出,JSON 选项在某些版本的 Chrome 上更快,但在 Safari 或 Firefox 上则不然。您可能还会在其他浏览器中找到混合使用。

您的 JavaScript 克隆代码位于 JavaScript 中。浏览器可以免费实现JSON.stringify,并JSON.parse采用高度优化的机器代码。(如果需要,它也可以免费将您的 JavaScript 编译成优化的机器代码。)因此,有时,一个相当简单的数组(例如您测试的数组)可能通过 JSON 比不使用更快,这并不奇怪。在某些引擎上。带有一些样本数据集。而在其他引擎(或其他样本数据集)上,会有不同的结果。

还值得注意的是,差异并不大,在任何现实世界的意义上都没有。在 Chrome 24 中显示的测试中,JSON 选项比最接近的竞争对手快约 25%。但每个单独的迭代都非常快,以至于在现实世界中没有任何区别。392k ops/sec 与 521k ops/sec,它仍然是 ops/sec 的一部分。:-)

于 2013-02-26T21:59:17.530 回答