3 回答

TA貢獻1829條經(jīng)驗 獲得超6個贊
如果有允許值的列表,則可以使用以下方法輕松地將它們保留在對象中:
const raw = {
item1: { key: 'sdfd', value:'sdfd' },
item2: { key: 'sdfd', value:'sdfd' },
item3: { key: 'sdfd', value:'sdfd' }
};
const allowed = ['item1', 'item3'];
const filtered = Object.keys(raw)
.filter(key => allowed.includes(key))
.reduce((obj, key) => {
obj[key] = raw[key];
return obj;
}, {});
console.log(filtered);
它使用:
Object.keys列出raw(原始數(shù)據(jù))中的所有屬性,然后
Array.prototype.filter 選擇存在于允許列表中的鍵,使用
Array.prototype.includes 確保它們存在
Array.prototype.reduce 建立一個僅具有允許屬性的新對象。
這將使用允許的屬性進行淺表復(fù)制(但不會自行復(fù)制屬性)。
您還可以使用對象散布運算符來創(chuàng)建一系列對象而無需對其進行突變(感謝rjerue提及了這一點):
const raw = {
item1: { key: 'sdfd', value:'sdfd' },
item2: { key: 'sdfd', value:'sdfd' },
item3: { key: 'sdfd', value:'sdfd' }
};
const allowed = ['item1', 'item3'];
const filtered = Object.keys(raw)
.filter(key => allowed.includes(key))
.reduce((obj, key) => {
return {
...obj,
[key]: raw[key]
};
}, {});
console.log(filtered);
出于瑣碎的目的,如果您想從原始數(shù)據(jù)中刪除不需要的字段(我不建議這樣做,因為它涉及一些丑陋的突變),則可以includes像這樣反轉(zhuǎn)檢查:
const raw = {
item1: { key: 'sdfd', value:'sdfd' },
item2: { key: 'sdfd', value:'sdfd' },
item3: { key: 'sdfd', value:'sdfd' }
};
const allowed = ['item1', 'item3'];
Object.keys(raw)
.filter(key => !allowed.includes(key))
.forEach(key => delete raw[key]);
console.log(raw);
我包括此示例以展示基于變異的解決方案,但我不建議使用它。

TA貢獻1807條經(jīng)驗 獲得超9個贊
如果您是使用ES6語法OK,我發(fā)現(xiàn),最干凈的方式來做到這一點,因為注意到這里和這里是:
const data = {
item1: { key: 'sdfd', value:'sdfd' },
item2: { key: 'sdfd', value:'sdfd' },
item3: { key: 'sdfd', value:'sdfd' }
};
const { item2, ...newData } = data;
現(xiàn)在,newData包含:
{
item1: { key: 'sdfd', value:'sdfd' },
item3: { key: 'sdfd', value:'sdfd' }
};
或者,如果您將密鑰存儲為字符串:
const key = 'item2';
const { [key]: _, ...newData } = data;
在后一種情況下,[key]將轉(zhuǎn)換為,item2但是由于您正在使用const分配,因此需要為分配指定名稱。_表示扔掉的值。
更普遍:
const { item2, ...newData } = data; // Assign item2 to item2
const { item2: someVarName, ...newData } = data; // Assign item2 to someVarName
const { item2: _, ...newData } = data; // Assign item2 to _
const { ['item2']: _, ...newData } = data; // Convert string to key first, ...
這樣不僅可以將您的操作簡化為單行,而且還不需要您知道其他鍵(要保留的鍵)是什么。

TA貢獻1852條經(jīng)驗 獲得超7個贊
沒有外部庫的Modern JS一行中的另一種解決方案。
我正在玩“ 解構(gòu) ”功能:
const raw = {
item1: { key: 'sdfd', value: 'sdfd' },
item2: { key: 'sdfd', value: 'sdfd' },
item3: { key: 'sdfd', value: 'sdfd' }
};
var myNewRaw = (({ item1, item3}) => ({ item1, item3 }))(raw);
console.log(myNewRaw);
添加回答
舉報