2017-08-13 58 views
0

我想从另一个对象中提取一个对象,并将提取的对象保存为单独的独立变量,并使其不再是第一个对象的一部分。以下似乎这样做,但似乎有点复杂。什么是正确的做法?从另一个对象中提取对象

function printIt(name,o) { 
    //Do this way so I can see what object was at given time. 
    console.log(name,JSON.stringify(o)) 
} 
var o = { 
    a: 123, 
    b: { 
    a: 111, 
    b: 222, 
    c: [3, 2, 1] 
    }, 
    c: { 
    a: 321, 
    b: 123, 
    c: [1, 2, 3] 
    } 
}; 
printIt("o0", o); 

var o_b = o.b; 

printIt("o_b1", o_b); 
printIt("o1", o); 

o_b.a = 444; 
o.b.c=666; 

printIt("o_b2", o_b); 
printIt("o2", o); 

delete o.b; 

printIt("o_b3", o_b); 
printIt("o3", o); 

https://jsfiddle.net/zn0asewb/1/

o0 {"a":123,"b":{"a":111,"b":222,"c":[3,2,1]},"c":{"a":321,"b":123,"c":[1,2,3]}} 
o_b1 {"a":111,"b":222,"c":[3,2,1]} 
o1 {"a":123,"b":{"a":111,"b":222,"c":[3,2,1]},"c":{"a":321,"b":123,"c":[1,2,3]}} 
o_b2 {"a":444,"b":222,"c":666} 
o2 {"a":123,"b":{"a":444,"b":222,"c":666},"c":{"a":321,"b":123,"c":[1,2,3]}} 
o_b3 {"a":444,"b":222,"c":666} 
o3 {"a":123,"c":{"a":321,"b":123,"c":[1,2,3]}} 

回答

1

也不清楚为什么你需要与对象键来这样做,但我会看看使用Object.assign。例如:

var o = { 
    a: 123, 
    b: { 
    a: 111, 
    b: 222, 
    c: [3, 2, 1] 
    }, 
    c: { 
    a: 321, 
    b: 123, 
    c: [1, 2, 3] 
    } 
}; 

var b = Object.assign({}, o.b) 
delete o.b; 

console.log(o) // { a: 123, c: { a: 321, b: 123, c: [ 1, 2, 3 ] } } 
console.log(b) // { a: 111, b: 222, c: [ 3, 2, 1 ] }