object - javascript 値渡し - JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?

Vue ディープコピー / javascript / clone

JavaScriptオブジェクトのクローンを作成する最も効率的な方法は何ですか? obj = eval(uneval(o)); を見てきました。使用されていますが、これは非標準であり、Firefoxでのみサポートされています。

obj = JSON.parse(JSON.stringify(o)); ようなことをしました。しかし、効率に疑問を投げかけます。

また、様々な欠陥を持つ再帰的なコピー機能も見てきました。
正統派のソリューションが存在しないことに驚きました。

26 revs, 21 users 25%



Answer #1

もし、内蔵されていなかったら、試してみてください。

function clone(obj) {
    if (obj === null || typeof (obj) !== 'object' || 'isActiveClone' in obj)
        return obj;

    if (obj instanceof Date)
        var temp = new obj.constructor(); //または新しいDate(obj);
    else
        var temp = obj.constructor();

    for (var key in obj) {
        if (Object.prototype.hasOwnProperty.call(obj, key)) {
            obj['isActiveClone'] = null;
            temp[key] = clone(obj[key]);
            delete obj['isActiveClone'];
        }
    }
    return temp;
}