JSBin 链接让你可以快速运行代码。
问题出在评论中,但是从文档中关于复活者(这个名字很糟糕)的工作方式来看,如果你不返回值或者如果你返回undefined
,那么应该从对象中删除该属性。如果您返回未转换的值,它保持不变。
然而,当我对其进行测试时,看起来整个对象都被移除了。第一个例子工作得很好,偶数转换为负数,奇数不变。
但在第二个例子中,我什至没有得到一个对象,只是未定义。那么我是误读了文档还是有其他问题?
在第二个示例中,结果只是未定义。
var obj = {
one: 1,
innerObj: {
two: 2,
four: 4
},
two: 2,
three: 3,
four: 4
},
b = {},
json = JSON.stringify(obj);
/**
* This works as expected.
*/
b = JSON.parse(json, function (name, value) {
if (value % 2 === 0) {
return -value;
}
return value;
});
console.log(b);
/**
[object Object] {
four: -4,
innerObj: [object Object] {
four: -4,
two: -2
},
one: 1,
three: 3,
two: -2
}
*/
obj = {
one: 1,
innerObj: {
two: 2,
four: 4
},
two: 2,
three: 3,
four: 4
};
b = {};
json = JSON.stringify(obj);
/**
* This does not work as expected, instead of deleting the property on the object, the entire object returns undefined.
*/
b = JSON.parse(json, function (name, value) {
if (value % 2 === 0) {
return -value;
}
});
console.log(b);
// undefined