0

JSBin リンクを使用すると、コードをすばやく実行できます。

JSbinhere

問題はコメントにありますが、値を返さない場合、または値を返す場合は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
4

1 に答える 1