第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過ES6中的鍵過濾對象屬性

通過ES6中的鍵過濾對象屬性

假設(shè)我有一個對象:{  item1: { key: 'sdfd', value:'sdfd' },  item2: { key: 'sdfd', value:'sdfd' },  item3: { key: 'sdfd', value:'sdfd' }}我想通過過濾上面的對象來創(chuàng)建另一個對象,所以我有類似的東西。 {    item1: { key: 'sdfd', value:'sdfd' },    item3: { key: 'sdfd', value:'sdfd' } }我正在尋找一種使用Es6完成此操作的干凈方法,因此可以使用散布運算符。謝謝!
查看完整描述

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);

我包括此示例以展示基于變異的解決方案,但我不建議使用它。


查看完整回答
反對 回復(fù) 2019-11-05
?
函數(shù)式編程

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, ...

這樣不僅可以將您的操作簡化為單行,而且還不需要您知道其他鍵(要保留的鍵)是什么。


查看完整回答
反對 回復(fù) 2019-11-05
?
慕姐4208626

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);


查看完整回答
反對 回復(fù) 2019-11-05
  • 3 回答
  • 0 關(guān)注
  • 4372 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號