[英]Partial object copying using Destructuring Assignment
有一個輸入對象需要復制到另一個對象是很常見的。 通常您需要復制一些屬性,最終得到一個非常相似的對象,但屬性較少。
假設你有這個輸入對象:
// an object with data
let oldObject = {
a: 'this is a',
b: 'this is b',
c: 'this is c',
d: 'this is d'
}
我是這樣做的:
let myNewObject = {
a: oldObject.a,
b: oldObject.b,
c: oldObject.c
}
這是我一直在使用的一個:
// new version
let { a, b, c } = oldObject
let myNewObject = { a, b, c };
我開始使用的這個,似乎工作正常:
// newer version
let myNewObject = { a, b, c } = oldObject;
新版本的問題是我聲明了變量 a、b 和 c。 在這種情況下,沒有問題(幾乎),但是如果它們的名稱是input
、 output
、 temp
、 i
或任何其他可能已經在作用域中聲明的變量的通用名稱呢?
所以解決方案很好,但更好的是這些變量是在該行中以某種方式創建和銷毀的,而在其他地方不可用。 myNewObject
當然應該是可以訪問的。
我嘗試將它包裝在這樣的函數中,但根本沒有運氣:
let myNewObject = (function() { return { a, b, c } = oldObject })();
let myNewObject = (function() { let temp = { a, b, c } = oldObject; return temp; })();
所以我不確定實現這一目標的最佳方法是什么,我正在接近,但我錯過了一些東西。
新版本的問題是我聲明了變量 a、b 和 c。 在這種情況下沒有問題
有一個大問題。
let myNewObject = { a, b, c } = oldObject;
分配給現有的a
, b
和c
變量,這將在松散模式下污染全局范圍或在嚴格模式下導致錯誤。 而myNewObject === oldObject
。 它的ES5 變體是:
var myNewObject = (a = oldObject.a, b = oldObject.b, c = oldObject.c, oldObject);
正如在這個答案中解釋的那樣,您正在尋找的單線是具有解構參數的 IIFE:
let myNewObject = (({ a, b, c }) => ({ a, b, c }))(oldObject);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.