亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

重構基于鍵/值對值過濾的代碼

重構基于鍵/值對值過濾的代碼

慕標5832272 2023-03-24 13:40:34
我有以下代碼,它按預期工作 - 它正確地過濾掉值為 null、false 的鍵/值對,并返回具有其他鍵/值對的對象。但是,它相當冗長,我想知道是否有辦法簡化它。const settings = {    distance: null,    length: 23,    weight: null,    isActive: false,    isRound: true}const data = {};Object.entries(settings).filter(([, value]) => value !== null).filter(([, value]) => value !== false).forEach(([key, value]) => (data[key] = value));      console.log(data);
查看完整描述

5 回答

?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

您可以刪除所有虛假值并只迭代一次:


    const settings = {

        distance: null,

        length: 23,

        weight: null,

        isActive: false,

        isRound: true

    }


    const data = {};

    Object.entries(settings)

      .forEach(([key, value]) => {

        if(!!value) {

          data[key]= value;       

        }

     })

          

    console.log(data);


查看完整回答
反對 回復 2023-03-24
?
largeQ

TA貢獻2039條經驗 獲得超8個贊

在香草 javscript 中,在單個循環中會更容易


const settings = {

    distance: null,

    length: 23,

    weight: null,

    isActive: false,

    isRound: true

}


const data = {}


for(var key in settings) {

    if(settings[key] !== false && settings[key] !== null) {

        data[key] = settings[key];

    }

}

不確定為什么要使用多種過濾方法并減少,因為它會導致額外的迭代。


查看完整回答
反對 回復 2023-03-24
?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

使用 reducer 代替你的 怎么樣forEach?


const settings = {

    distance: null,

    length: 23,

    weight: null,

    isActive: false,

    isRound: true

}


const data = Object.entries(settings)

  .filter(([, value]) => value !== null && value !== false)

  .reduce((acc, [key, value]) => {

     (acc[key] = value);

     return acc;

  }, {});

      

console.log(data);


查看完整回答
反對 回復 2023-03-24
?
UYOU

TA貢獻1878條經驗 獲得超4個贊

作為替代方案,這里有一些可以說更簡單但不是功能性版本,它使用可變性來刪除有問題的鍵:


const settings = {

    distance: null,

    length: 23,

    weight: null,

    isActive: false,

    isRound: true

}


const copy = Object.assign({}, settings);

Object.entries(copy).forEach(([key, value]) => {

  if (value === null || value === false) delete copy[key];

});


console.log(copy);


如果符合您的口味,可短一點。


查看完整回答
反對 回復 2023-03-24
?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

你為什么不在一次迭代中檢查這些條件


改變這個


.filter(([, value]) => value !== null)

.filter(([, value]) => value !== false)


.filter(([, value]) => !!value)

或使用單循環檢查條件并在數據對象中附加數據,例如:


Object.entries(settings)

      .forEach(([key, value]) => {

        if(!!value) {

          data[key]= value;       

        }

     })


查看完整回答
反對 回復 2023-03-24
  • 5 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號