使用简化的ES2015解构语法更新两个javascript对象[关闭]

问题描述 投票:0回答:1
我有两个对象-本地对象和全局对象。

let globalObject = { alpha: 'Alpha Value', beta: {betaGlobal1: 'Default Beta Global 1 Value'} }; let localObject = { betaLocal: 'Custom Local Beta Value', // <= May be present or absent gamma: 'Gamma Value' };

如果本地对象包含属性betaLocal,我想在全局对象中更新相应的beta.betaGlobal属性。否则,我想向本地对象添加一个betaLocal属性,该属性与其在全局对象中的beta.betaGlobal对应属性相对应。

这里是没有ES2015销毁的地方:

let propertyName = 'betaGlobal1'; let globalObject = { alpha: 'Alpha Value', beta: {betaGlobal1: 'Default Beta Global 1 Value'} }; let localObject = { betaLocal: 'Custom Local Beta Value', // <= May be present or absent gamma: 'Gamma Value' }; // ATTEMPT FOUR let beta = localObject.betaLocal || globalObject.beta[propertyName]; localObject.betaLocal = globalObject.beta[propertyName] = beta; console.log(globalObject); console.log(localObject);
// ATTEMPT FOUR之前,我也尝试过:

// ATTEMPT ONE if (!localObject.hasOwnProperty('betaLocal')) { localObject.betaLocal = globalObject.beta[propertyName]; } else { globalObject.beta[propertyName] = localObject.betaLocal; }


// ATTEMPT TWO if (!localObject.hasOwnProperty('betaLocal')) { localObject.betaLocal = globalObject.beta[propertyName]; } globalObject.beta[propertyName] = localObject.betaLocal;

// ATTEMPT THREE let beta = localObject.betaLocal || globalObject.beta[propertyName]; localObject.betaLocal = beta; globalObject.beta[propertyName] = beta;

它们都起作用,所以很好。

但是我想[[真正想做的是使用ES2015 +对象解构传达了以上内容。

但是我实在无法解决。可能吗?

javascript ecmascript-6 destructuring
1个回答
0
投票
虽然看起来很隐秘。我认为我不会使用它。

let propertyName = 'betaGlobal1'; let globalObject = { alpha: 'Alpha Value', beta: {betaGlobal1: 'Default Beta Global 1 Value'} }; let localObject = { betaLocal: 'Custom Local Beta Value', // <= May be present or absent gamma: 'Gamma Value' }; // ATTEMPT FIVE if (localObject.hasOwnProperty('betaLocal')) { ({betaLocal: globalObject.beta.betaGlobal1} = localObject); } else { ({beta: {betaGlobal1: localObject.betaLocal}} = globalObject); } console.log(globalObject); console.log(localObject);
© www.soinside.com 2019 - 2024. All rights reserved.