如何删除json对象键和值。?
Posted
技术标签:
【中文标题】如何删除json对象键和值。?【英文标题】:how to remove json object key and value.? 【发布时间】:2018-03-17 21:25:55 【问题描述】:我有一个 json 对象,如下所示。我想通过使用下面不起作用的代码来删除“otherIndustry”条目及其值。
var updatedjsonobj = delete myjsonobj['otherIndustry'];
如何删除 Json 对象的特定键及其值。 下面是我要删除“otherIndustry”键及其值的示例 json 对象。
var myjsonobj =
"employeeid": "160915848",
"firstName": "tet",
"lastName": "test",
"email": "test@email.com",
"country": "Brasil",
"currentIndustry": "aaaaaaaaaaaaa",
"otherIndustry": "aaaaaaaaaaaaa",
"currentOrganization": "test",
"salary": "1234567"
;
delete myjsonobj ['otherIndustry'];
console.log(myjsonobj);
日志仍然打印相同的对象而不从对象中删除“otherIndustry”条目。
【问题讨论】:
Remove key-value pair from JSON object的可能重复 你的代码应该可以工作,你能创建一个MVCE吗***.com/help/mcve 删除 myObj.other.key1; As shown in this example. 没用 结果如何?你能解释一下吗? 不@Alexandru-IonutMihai,实际上我的代码是var myjsonobj = "employeeid": "160915848", "firstName": "tet", "lastName": "test", "email": "test@email.com", "country": "Brasil", "currentIndustry": "aaaaaaaaaaaaa", "otherIndustry": "aaaaaaaaaaaaa", "currentOrganization": "test", "salary": "1234567" ; delete myjsonobj ['otherIndustry']; console.log(myjsonobj );
仍然打印相同的对象。 :(
【参考方案1】:
delete
运算符用于remove
对象property
。
delete
运算符不返回新对象,只返回boolean
:true或false。
另一方面,解释器执行 var updatedjsonobj = delete myjsonobj['otherIndustry'];
后,updatedjsonobj
变量将存储一个 boolean
价值。
如何删除 Json 对象的特定键及其值?
您只需要知道属性名称即可将其从对象的属性中删除。
delete myjsonobj['otherIndustry'];
let myjsonobj =
"employeeid": "160915848",
"firstName": "tet",
"lastName": "test",
"email": "test@email.com",
"country": "Brasil",
"currentIndustry": "aaaaaaaaaaaaa",
"otherIndustry": "aaaaaaaaaaaaa",
"currentOrganization": "test",
"salary": "1234567"
delete myjsonobj['otherIndustry'];
console.log(myjsonobj);
如果您想在知道值后删除key
,可以使用Object.keys
函数,该函数返回给定对象自己的可枚举属性的数组。
let value="test";
let myjsonobj =
"employeeid": "160915848",
"firstName": "tet",
"lastName": "test",
"email": "test@email.com",
"country": "Brasil",
"currentIndustry": "aaaaaaaaaaaaa",
"otherIndustry": "aaaaaaaaaaaaa",
"currentOrganization": "test",
"salary": "1234567"
Object.keys(myjsonobj).forEach(function(key)
if (myjsonobj[key] === value)
delete myjsonobj[key];
);
console.log(myjsonobj);
【讨论】:
所以不管返回值如何,key:value
是否会按照 OP 的代码从对象中删除?
你也可以使用点符号:delete myjsonobj.otherIndustry;
【参考方案2】:
有几种方法可以做到这一点,让我们一一看看:
-
删除方法:最常用的方法
const myObject =
"employeeid": "160915848",
"firstName": "tet",
"lastName": "test",
"email": "test@email.com",
"country": "Brasil",
"currentIndustry": "aaaaaaaaaaaaa",
"otherIndustry": "aaaaaaaaaaaaa",
"currentOrganization": "test",
"salary": "1234567"
;
delete myObject['currentIndustry'];
// OR delete myObject.currentIndustry;
console.log(myObject);
-
通过使键值未定义:替代和更快的方法:
let myObject =
"employeeid": "160915848",
"firstName": "tet",
"lastName": "test",
"email": "test@email.com",
"country": "Brasil",
"currentIndustry": "aaaaaaaaaaaaa",
"otherIndustry": "aaaaaaaaaaaaa",
"currentOrganization": "test",
"salary": "1234567"
;
myObject.currentIndustry = undefined;
myObject = JSON.parse(JSON.stringify(myObject));
console.log(myObject);
-
使用 es6 spread 运算符:
const myObject =
"employeeid": "160915848",
"firstName": "tet",
"lastName": "test",
"email": "test@email.com",
"country": "Brasil",
"currentIndustry": "aaaaaaaaaaaaa",
"otherIndustry": "aaaaaaaaaaaaa",
"currentOrganization": "test",
"salary": "1234567"
;
const currentIndustry, ...filteredObject = myObject;
console.log(filteredObject);
或者如果你可以使用 underscore js 库的 omit():
const filteredObject = _.omit(currentIndustry, 'myObject');
console.log(filteredObject);
什么时候用什么?
如果您不想创建新的过滤对象,只需选择选项 1 或 2。确保使用 let 定义对象,同时使用第二个选项,因为我们将覆盖价值观。或者你可以使用其中任何一个。
希望这会有所帮助:)
【讨论】:
好方法:)【参考方案3】:按照这个,它可以像你在看的那样:
var obj =
Objone: 'one',
Objtwo: 'two'
;
var key = "Objone";
delete obj[key];
console.log(obj); // prints "objtwo": two
【讨论】:
【参考方案4】:这里还有一个例子。 (查看reference)
const myObject =
"employeeid": "160915848",
"firstName": "tet",
"lastName": "test",
"email": "test@email.com",
"country": "Brasil",
"currentIndustry": "aaaaaaaaaaaaa",
"otherIndustry": "aaaaaaaaaaaaa",
"currentOrganization": "test",
"salary": "1234567"
;
const otherIndustry, ...otherIndustry2 = myObject;
console.log(otherIndustry2);
.as-console-wrapper
max-height: 100% !important;
top: 0;
【讨论】:
【参考方案5】:我在尝试删除返回的 JSON 对象时遇到问题,发现它实际上是一个字符串。如果您在删除之前使用 JSON.parse(),则可以确定您的密钥将被删除。
let obj;
console.log(this.getBody()); // "AED":3.6729,"AZN":1.69805,"BRL":4.0851
obj = this.getBody();
delete obj["BRL"];
console.log(obj) // "AED":3.6729,"AZN":1.69805,"BRL":4.0851
obj = JSON.parse(this.getBody());
delete obj["BRL"];
console.log(obj) // "AED":3.6729,"AZN":1.69805
【讨论】:
【参考方案6】:function omit(obj, key)
const [key]:ignore, ...rest = obj;
return rest;
您可以像这样使用 ES6 扩展运算符。要删除您的密钥,只需调用
const newJson = omit(myjsonobj, "otherIndustry");
在javascript中处理type=object
时保持纯函数总是更好。
【讨论】:
以上是关于如何删除json对象键和值。?的主要内容,如果未能解决你的问题,请参考以下文章
Android JSONObject - 我如何遍历一个平面 JSON 对象来获取每个键和值
$.ajax 从 php 获取 json_encode($arr) 之后的对象,但是如何在 jQuery 中获取键和值?