JSBin リンクを使用すると、コードをすばやく実行できます。
問題はコメントにありますが、値を返さない場合、または値を返す場合はundefined
、そのプロパティをオブジェクトから削除する必要があります。変換されていない値を返す場合、それは同じままです。
しかし、テストしてみると、オブジェクト全体が削除されているように見えます。最初の例は問題なく動作し、偶数は負の数に変換され、奇数は変更されません。
しかし、2 番目の例では、オブジェクトを取得することさえできず、単に未定義です。ドキュメントを読み間違えているのでしょうか、それとも何か問題がありますか?
2 番目の例では、結果は定義されていません。
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