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