【发布时间】:2017-07-26 14:14:50
【问题描述】:
我目前正在按照“你不懂js”系列学习javascript。
在“types & grammer”一节中,作者在讨论“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 thx,我没有集中注意力,它写在问题中!你每天都在学习..
标签: javascript json