我目前正在學習JavaScript的系列「你不知道js」。傳遞一個函數到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]}"
注:在功能替代品的情況下,關鍵參數k的未定義 爲第一個調用(其中一個對象本身被傳入)。 if語句過濾掉名爲「c」的屬性。字符串化爲 遞歸,因此[1,2,3]數組將其每個值(1,2和3) 作爲v傳遞給替換器,索引(0,1和2)爲k。
所以我用下面的代碼出來,旨在從JSON.stringify
結果刪除值22
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);
我期待的結果是"{"b":42,"c":"42","d":[11,33]}"
。
然而,結果卻反而"{"b":42,"c":"42","d":[11,22,33]}"
(你可以在屬性的C指數1看到的,值22沒有被過濾掉)
明白我錯過了筆者所說的嗎?我錯過了什麼嗎?
@Kaddath - 否替換函數以遞歸方式運行。 – Quentin
@Quentin thx,我沒有專注,這是寫在問題!你學習每一天.. – Kaddath