私は現在、 "あなたはjsを知っていません"というシリーズに従ってJavaScriptを学習しています。機能代替場合、キー引数kを用 を未定義である:「JSON.stringify」機能を議論する際には、「タイプ&文法」でJSON.stringifyに関数を渡します。
は、著者は注意
var a = { b: 42, c: "42", d: [11,22,33] }; JSON.stringify(a, ["b","c"]); // "{"b":42,"c":"42"}" JSON.stringify(a, function(k,v){ if (k !== "c") return v; }); // "{"b":42,"d":[11,22,33]}"
言及しました最初の呼び出し(オブジェクト自体が渡されている場所)。 ifステートメントは、 "c"という名前のプロパティを除外します。ストリング化は 再帰的であるので、[1,2,3]配列はそれぞれの値(1,2,3) をvとして置換子に渡し、添え字(0,1,2)をkとして渡します。
だから、私は結果が"{"b":42,"c":"42","d":[11,33]}"
であることを期待していたJSON.stringify
結果
var a = {
b: 42,
c: "42",
d: [11, 22, 33]
};
var result = JSON.stringify(a, function(k, v) {
//since each index 0, 1, 2 of property "c" will be passed into function as "k",
//therefore if "k !== 1" should filter out value 22
if (k !== 1) {
return v;
}
});
console.log(result);
から値22
を除去することを目的とし、次のコードで出てきています。
はしかし、結果は、代わりに"{"b":42,"c":"42","d":[11,22,33]}"
(あなたが見ることができるように、財産cのインデックス1の値22が除外されていない)
私は著者が言ったことを理解逃したのでしたか?何か不足していますか?
@Kaddath - いいえ。Replacer関数は再帰的に実行されます。 – Quentin
@Quentin thx、私は集中していなかった、それは質問に書かれている!あなたは毎日を学びます.. – Kaddath