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

JSON的处理问题

JSON的处理问题

慕勒5811226 2016-07-07 08:33:37
var collection = {     2548: {       album: "Slippery When Wet",       artist: "Bon Jovi",       tracks: [          "Let It Rock",          "You Give Love a Bad Name"        ]     },     2468: {       album: "1999",       artist: "Prince",       tracks: [          "1999",          "Little Red Corvette"        ]     },     1245: {       artist: "Robert Palmer",       tracks: [ ]     },     5439: {       album: "ABBA Gold"     } }; // Keep a copy of the collection for tests var collectionCopy = JSON.parse(JSON.stringify(collection)); function update(id, prop, value) { if(prop !== "tracks" && value !== null){   collection[id][prop] = value; }else if(prop === "tracks" && value !== null){   collection[id][prop].push(value); }else if(value === null){   delete collection[id]['artist'];  //问题在这里!! }   return collection; } console.log(update(5439, "artist", ""));如果我传的第三个参数value为空的话,删除artist这个属性,为什么我这样删除不了??
查看完整描述

4 回答

已采纳
?
Suber丶林

TA贡献75条经验 获得超180个赞

你第三个if里面的判断是value === null,而你传的是控制符串"",那么你使用的三个等号,也就是“全等于”,那么很明显null !== "",所以你进入的是第一个if。

修改如下:

① 把你43行传入的空字符串换成null,即update(5439, "artist", null));

② 把你35行的 else if (value === null)换成else即可,因为你前面已经包含了value不为null的所有可能性,所以换成else即可。

PS:JavaScript小秘诀,null、undefined、0、""、false、NaN都为false,所以使用条件的时候不用去判断是否等于或不等于前面的值。

比如你上面的[value !== null],可以换成[value]。

[value === null]可以换成[!value]。

查看完整回答
2 反对 回复 2016-07-07
?
Gavin_Alison

TA贡献8条经验 获得超10个赞

后台输出collection[id]['artist']是否有值,如果有,为什么不置空, 为null.

查看完整回答
1 反对 回复 2016-07-07
?
慕粉15920169039

TA贡献1条经验 获得超0个赞

delete collection[id]['artist'];  //问题在这里!!['artist']应该写成[prop];

value !== null 这个可以写成value

value === null 写成 !value

前面没问题吗,我也做的同样,但是push那部分总报错


-----完全错了 ==|||


查看完整回答
反对 回复 2016-11-06
?
老猿

TA贡献86条经验 获得超82个赞

‘’===null    这个是false吧  

查看完整回答
反对 回复 2016-07-07
  • 4 回答
  • 0 关注
  • 2747 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信