我目前正在学习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