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

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

JavaScript - 如何從對象中排除元素?

JavaScript - 如何從對象中排除元素?

呼喚遠方 2022-05-22 11:10:54
我有一個 object MainObject,但我想在將其返回給用戶之前排除并映射一些鍵。但是,我不知道所有的鍵,因為我使用...{}運算符讓用戶將一些自定義數據添加到對象中。我的代碼看起來像這樣:var UserData = {Id: 123, Name: "Hello World"}var Data = {Main: "Data", Secret: "Data1", Math: 22, ...UserData}// Resulting Object Keys [Main, Secret, Math, Id, Name]// Wanted Object {Main, Math/2, Id, Name}var result = ?我想做的是排除該Secret屬性并將該Math屬性除以 2,同時保持 Data 對象不變。
查看完整描述

3 回答

?
海綿寶寶撒

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

const { Secret, ...result } = Data;


result.mathDivBy2 = function() { return this.Math/2; }


console.log(result);



要獲得 Math/2,請致電result.mathDivBy2();


如果您想要更方便的訪問,而不是函數,您可以為result對象定義 getter:


Object.defineProperty(result, 'mathDivBy2', {

  get: function() { return this.Math/2; } 

});

并像使用任何其他屬性一樣使用它:result.mathDivBy2


查看完整回答
反對 回復 2022-05-22
?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

您可以按如下方式解構Math / 2您的對象并在解構后分配:


var UserData = { Id: 123, Name: "Hello World" };

var Data = { Main: "Data", Secret: "Data1", Math: 22, ...UserData };

var { Secret, ...result } = Data;

result.Math /= 2;

console.log(result);


查看完整回答
反對 回復 2022-05-22
?
慕桂英3389331

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

  1. 要刪除Secret鍵值對,您只需要做delete Data.Secret.

  2. 要除以Data.Math2,您可以執行Data.Math /= 2.

const UserData = {

  Id: 123,

  Name: "Hello World"

}

const Data = {

  Main: "Data",

  Secret: "Data1",

  Math: 22,

  ...UserData

}


// Delete `Data.Secret`

delete Data.Secret;


// Divide `Data.Math`

Data.Math /= 2;


console.log(Data);


但是,如果您不太確定傳入的形狀UserData并希望確保只允許列入白名單的鍵值對,則必須定義允許的鍵,然后遍歷整個對象以刪除不需要的鍵:


const UserData = {

  Id: 123,

  Name: "Hello World"

}

const Data = {

  Main: "Data",

  Secret: "Data1",

  Math: 22,

  ...UserData

}


// Whitelist allowed object keys

const allowedKeys = ['Main', 'Math', 'Id', 'Name'];

Object.keys(Data).forEach(key => {

  if (!allowedKeys.includes(key))

    delete Data[key];

});


// Divide `Data.Math`

Data.Math /= 2;


console.log(Data);


查看完整回答
反對 回復 2022-05-22
  • 3 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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