2017-04-15 154 views
1

是否有可能使用解構賦值語法來將數據對象提取到另一個對象而不是不同的變量中?解構賦值構造一個新對象 - 有可能嗎?

實施例,其產生不同的變量(FOO,巴):

var {p: foo, q: bar} = {p: 42, q: true}; 
 
    
 
console.log(foo); // 42 
 
console.log(bar); // true

我需要在代替創建一個包含下列屬性作爲新的對象:

var n = { 
foo: 42, 
bar: true 
} 
+0

@torazaburo這話題是,來到我的腦海裏的第一件事。但是我沒有把它標記爲一個騙局,因爲它不是一個愚蠢的問題。只有相關。答案只是部分相交。這個問題是關於默認值 - 儘管標題說什麼。 – estus

回答

1

這是不可能的。術語解構意味着對象是解構變量

的一種方式,以不與臨時變量污染的範圍是使用IIFE的解構:

obj = (({ foo = 'foo', bar = 'bar' }) => ({ foo, bar }))(obj); 

這將分配的默認值,並會選擇從對象唯一有效的密鑰。

如果採摘是沒有必要的,最乾淨的配方與原生JS功能做到這一點Object.assign

obj = Object.assign({ foo: 'foo', bar: 'bar' }, obj); 
1

它有點像,但你需要兩個步驟。你不能直接從一個對象解構到另一個對象中,但是你可以通過使用ES6對象表示法並將其包裝到一個函數中來實現這一點。

function transformObject(object) { 
    const { p: foo, q: bar } = object; 
    const newObject = { 
    foo, 
    bar 
    }; 
    return newObject; 
} 
0

你不能用解構做到這一點,但你可以使用一個輔助功能是這樣的:

function retag(newStructure, source) { 
 
    var result = {}; 
 
    for (var key in newStructure) { 
 
    result[key] = source[newStructure[key]]; 
 
    } 
 
    return result; 
 
} 
 

 
console.log(retag(
 
    { foo: 'a', bar: 'b' }, 
 
    { a: false, b: 42, c: 'unused'} 
 
));