JavaScript-如何从对象中排除元素?
我有一个对象JavaScript-如何从对象中排除元素?,javascript,key,Javascript,Key,我有一个对象main对象,但我想在将其返回给用户之前排除并映射一些键。但是,我不知道所有的键,因为我使用..{}操作符让用户向对象中添加一些自定义数据 我的代码如下所示: var UserData={Id:123,名称:“Hello World”} var Data={Main:“Data”,Secret:“Data1”,Math:22,…UserData} //结果对象密钥[主、秘密、数学、Id、名称] //想要的对象{Main,Math/2,Id,Name} var结果=? 我想做的是排除
main对象
,但我想在将其返回给用户之前排除并映射一些键。但是,我不知道所有的键,因为我使用..{}
操作符让用户向对象中添加一些自定义数据
我的代码如下所示:
var UserData={Id:123,名称:“Hello World”}
var Data={Main:“Data”,Secret:“Data1”,Math:22,…UserData}
//结果对象密钥[主、秘密、数学、Id、名称]
//想要的对象{Main,Math/2,Id,Name}
var结果=?
我想做的是排除Secret
属性,并将Math
属性设置为2,同时保持数据对象的完整性。只需删除它
var UserData = {Id: 123, Name: "Hello World"}
var Data = {Main: "Data", Secret: "Data1", Math: 22, ...UserData}
var forexclude = Object.assign({}, Data); //for cloning object
var excluded = delete forexclude.Secret; // for remove Secret
alert(JSON.stringify(forexclude, null, 4));
alert(JSON.stringify(excluded, null, 4));
// Resulting Object Keys [Main, Secret, Math, Id, Name]
// Wanted Object {Main, Math/2, Id, Name}
var result = ?
您可以按如下方式创建对象,并在分解结构后分配Math/2
:
var UserData={Id:123,名称:“Hello World”};
var Data={Main:“Data”,Secret:“Data1”,Math:22,…UserData};
var{Secret,…result}=数据;
结果:数学/=2;
控制台日志(结果)代码>
要删除Secret
键值对,只需执行删除数据.Secret
要将Data.Math
除以2,可以执行Data.Math/=2
const UserData={
Id:123,
名字:“你好,世界”
}
常数数据={
主:“数据”,
秘密:“数据1”,
数学:22,
…用户数据
}
//删除`Data.Secret`
删除数据。保密;
//除数`
Data.Math/=2;
控制台日志(数据)代码>
要获得Math/2,您需要调用result.mathDivBy2()代码>
如果希望更方便地访问,而不是函数,可以为result
对象定义getter:
Object.defineProperty(result, 'mathDivBy2', {
get: function() { return this.Math/2; }
});
并像使用任何其他属性一样使用它:result.mathDivBy2
,因为您希望保持数据对象完整。最好先对其进行深度克隆,然后删除不需要的键,并根据需要更新值
var UserData={Id:123,名称:“Hello World”}
var Data={Main:“Data”,Secret:“Data1”,Math:22,…UserData};
var result=JSON.parse(JSON.stringify(Data));
删除结果[“机密”];
结果[“数学”]/=2;
控制台日志(结果);
//数据将保持原样
控制台日志(数据)
delete
于1997年6月在JavaScript 1.2中引入。参考我问题的最后一句“保持数据对象完好无损”,这不是我想要的,因为这不会保持数据对象完好无损
Object.defineProperty(result, 'mathDivBy2', {
get: function() { return this.Math/2; }
});