为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号