如何从打字稿中的对象中删除某些属性?
How do I remove a some properties from an object in typescript?
假设我创建了一个对象如下:
formSummery: any = [];
{
"jobs" : [ {
"job_id" : 10,
"users" : [ {
"user_id" : 11,
"data_points" : [ {
"efficiency" : "good",
"form_id" : "2",
"instrument_type" : "plug",
"background_value" : "7",
"surveyed_item_id" : "100",
"duration" : 0,
"start_time" : "2017-07-20T04:04:43.000Z",
"datastream" : "GENERIC",
"username" : "abc@gmail.com.com"
}]
} ]
} ]
}
删除 属性 数据流、用户名和 start_time 以得到如下所示的新 formSummery 的最佳方法是什么?
{
"jobs" : [ {
"job_id" : 10,
"users" : [ {
"user_id" : 11,
"data_points" : [ {
"efficiency" : "good",
"form_id" : "2",
"instrument_type" : "plug",
"background_value" : "7",
"surveyed_item_id" : "100",
"duration" : 0
}]
} ]
} ]
}
现在,我有两个相同的数组 formSummery 和 unstrdformSummery,我想从第二个数组 (unstrdformSummery) 中删除一些属性,而那些属性仍然需要在第一个数组 (formSummery) 中:
formSummery =
{
"planned_activity":"Yes",
"ingest_time":"2017-08-03T12:12:32.456Z",
"arrival_time":"8",
"device_id":"26e09c88237d5342",
"user_name":"ABC","form_id":"1",
"firmware_version":"2.2",
"site_access_was_provided_as_expected":"Yes",
"energy_manager":"Aaaa",
"duration":0,
"start_time":"2017-08-03T12:12:28.736Z",
"datastream":"GENERIC",
"addressing_percent_complete":"92",
"password":"pwd",
"template_name":"Daily Field Report",
"user_id":11,
"site_access_notes":"testing",
"startup_percent_complete":"65",
"energy_manager_ip":"0:0:0:0",
"was_site_access_granted_on_time":"Yes",
"departure_time":"9",
"username":"abc@gmail.com"
}
unstrdformSummery =
{
"planned_activity":"Yes",
"ingest_time":"2017-08-03T12:12:32.456Z",
"arrival_time":"8",
"device_id":"26e09c88237d5342",
"user_name":"ABC","form_id":"1",
"firmware_version":"2.2",
"site_access_was_provided_as_expected":"Yes",
"energy_manager":"Aaaa",
"duration":0,
"start_time":"2017-08-03T12:12:28.736Z",
"datastream":"GENERIC",
"addressing_percent_complete":"92",
"password":"pwd",
"template_name":"Daily Field Report",
"user_id":11,
"site_access_notes":"testing",
"startup_percent_complete":"65",
"energy_manager_ip":"0:0:0:0",
"was_site_access_granted_on_time":"Yes",
"departure_time":"9",
"username":"abc@gmail.com"
}
嗯,你可以通过调用简单的 delete
函数来完成:
var myObject = {
"jobs": [{
"job_id": 10,
"users": [{
"user_id": 11,
"data_points": [{
"efficiency": "good",
"form_id": "2",
"instrument_type": "plug",
"background_value": "7",
"surveyed_item_id": "100",
"duration": 0,
"start_time": "2017-07-20T04:04:43.000Z",
"datastream": "GENERIC",
"username": "abc@gmail.com.com"
}]
}]
}]
};
for (let i = 0; i < myObject.jobs.length; i++){
for (let j = 0; j < myObject.jobs[i].users.length; j++){
for (let g = 0; g < myObject.jobs[i].users[j].data_points.length; g++){
delete myObject.jobs[i].users[j].data_points[g].username;
delete myObject.jobs[i].users[j].data_points[g].datastream;
delete myObject.jobs[i].users[j].data_points[g].start_time;
}
}
}
如果它也只有 1 个用户,1 个工作,1 个 data_points,你可以这样使用:
delete myObject.jobs[0].users[0].data_points[0].username;
delete myObject.jobs[0].users[0].data_points[0].datastream;
delete myObject.jobs[0].users[0].data_points[0].start_time;
------编辑
如果你想存储所有参数的旧对象,你可以在删除之前克隆你的对象。您可以使用 Object.clone 函数或简单地使用 JSON.parse(JSON.stringify(object))
(我在示例中使用了它)。你不能使用简单的var newObj = object
(如果你要改变对象,newobj也会改变)
formSummery =
{
"planned_activity":"Yes",
"ingest_time":"2017-08-03T12:12:32.456Z",
"arrival_time":"8",
"device_id":"26e09c88237d5342",
"user_name":"ABC","form_id":"1",
"firmware_version":"2.2",
"site_access_was_provided_as_expected":"Yes",
"energy_manager":"Aaaa",
"duration":0,
"start_time":"2017-08-03T12:12:28.736Z",
"datastream":"GENERIC",
"addressing_percent_complete":"92",
"password":"pwd",
"template_name":"Daily Field Report",
"user_id":11,
"site_access_notes":"testing",
"startup_percent_complete":"65",
"energy_manager_ip":"0:0:0:0",
"was_site_access_granted_on_time":"Yes",
"departure_time":"9",
"username":"abc@gmail.com"
}
newForm = JSON.parse(JSON.stringify(formSummery));
delete newForm.username;
delete newForm.datastream;
delete newForm.start_time;
newForm 对象将存储没有这些参数的新对象,而 formSummery 将存储旧对象(所有参数)。
希望对您有所帮助。
假设我创建了一个对象如下:
formSummery: any = [];
{
"jobs" : [ {
"job_id" : 10,
"users" : [ {
"user_id" : 11,
"data_points" : [ {
"efficiency" : "good",
"form_id" : "2",
"instrument_type" : "plug",
"background_value" : "7",
"surveyed_item_id" : "100",
"duration" : 0,
"start_time" : "2017-07-20T04:04:43.000Z",
"datastream" : "GENERIC",
"username" : "abc@gmail.com.com"
}]
} ]
} ]
}
删除 属性 数据流、用户名和 start_time 以得到如下所示的新 formSummery 的最佳方法是什么?
{
"jobs" : [ {
"job_id" : 10,
"users" : [ {
"user_id" : 11,
"data_points" : [ {
"efficiency" : "good",
"form_id" : "2",
"instrument_type" : "plug",
"background_value" : "7",
"surveyed_item_id" : "100",
"duration" : 0
}]
} ]
} ]
}
现在,我有两个相同的数组 formSummery 和 unstrdformSummery,我想从第二个数组 (unstrdformSummery) 中删除一些属性,而那些属性仍然需要在第一个数组 (formSummery) 中:
formSummery =
{
"planned_activity":"Yes",
"ingest_time":"2017-08-03T12:12:32.456Z",
"arrival_time":"8",
"device_id":"26e09c88237d5342",
"user_name":"ABC","form_id":"1",
"firmware_version":"2.2",
"site_access_was_provided_as_expected":"Yes",
"energy_manager":"Aaaa",
"duration":0,
"start_time":"2017-08-03T12:12:28.736Z",
"datastream":"GENERIC",
"addressing_percent_complete":"92",
"password":"pwd",
"template_name":"Daily Field Report",
"user_id":11,
"site_access_notes":"testing",
"startup_percent_complete":"65",
"energy_manager_ip":"0:0:0:0",
"was_site_access_granted_on_time":"Yes",
"departure_time":"9",
"username":"abc@gmail.com"
}
unstrdformSummery =
{
"planned_activity":"Yes",
"ingest_time":"2017-08-03T12:12:32.456Z",
"arrival_time":"8",
"device_id":"26e09c88237d5342",
"user_name":"ABC","form_id":"1",
"firmware_version":"2.2",
"site_access_was_provided_as_expected":"Yes",
"energy_manager":"Aaaa",
"duration":0,
"start_time":"2017-08-03T12:12:28.736Z",
"datastream":"GENERIC",
"addressing_percent_complete":"92",
"password":"pwd",
"template_name":"Daily Field Report",
"user_id":11,
"site_access_notes":"testing",
"startup_percent_complete":"65",
"energy_manager_ip":"0:0:0:0",
"was_site_access_granted_on_time":"Yes",
"departure_time":"9",
"username":"abc@gmail.com"
}
嗯,你可以通过调用简单的 delete
函数来完成:
var myObject = {
"jobs": [{
"job_id": 10,
"users": [{
"user_id": 11,
"data_points": [{
"efficiency": "good",
"form_id": "2",
"instrument_type": "plug",
"background_value": "7",
"surveyed_item_id": "100",
"duration": 0,
"start_time": "2017-07-20T04:04:43.000Z",
"datastream": "GENERIC",
"username": "abc@gmail.com.com"
}]
}]
}]
};
for (let i = 0; i < myObject.jobs.length; i++){
for (let j = 0; j < myObject.jobs[i].users.length; j++){
for (let g = 0; g < myObject.jobs[i].users[j].data_points.length; g++){
delete myObject.jobs[i].users[j].data_points[g].username;
delete myObject.jobs[i].users[j].data_points[g].datastream;
delete myObject.jobs[i].users[j].data_points[g].start_time;
}
}
}
如果它也只有 1 个用户,1 个工作,1 个 data_points,你可以这样使用:
delete myObject.jobs[0].users[0].data_points[0].username;
delete myObject.jobs[0].users[0].data_points[0].datastream;
delete myObject.jobs[0].users[0].data_points[0].start_time;
------编辑
如果你想存储所有参数的旧对象,你可以在删除之前克隆你的对象。您可以使用 Object.clone 函数或简单地使用 JSON.parse(JSON.stringify(object))
(我在示例中使用了它)。你不能使用简单的var newObj = object
(如果你要改变对象,newobj也会改变)
formSummery =
{
"planned_activity":"Yes",
"ingest_time":"2017-08-03T12:12:32.456Z",
"arrival_time":"8",
"device_id":"26e09c88237d5342",
"user_name":"ABC","form_id":"1",
"firmware_version":"2.2",
"site_access_was_provided_as_expected":"Yes",
"energy_manager":"Aaaa",
"duration":0,
"start_time":"2017-08-03T12:12:28.736Z",
"datastream":"GENERIC",
"addressing_percent_complete":"92",
"password":"pwd",
"template_name":"Daily Field Report",
"user_id":11,
"site_access_notes":"testing",
"startup_percent_complete":"65",
"energy_manager_ip":"0:0:0:0",
"was_site_access_granted_on_time":"Yes",
"departure_time":"9",
"username":"abc@gmail.com"
}
newForm = JSON.parse(JSON.stringify(formSummery));
delete newForm.username;
delete newForm.datastream;
delete newForm.start_time;
newForm 对象将存储没有这些参数的新对象,而 formSummery 将存储旧对象(所有参数)。
希望对您有所帮助。