我目前正在按照“您不知道js”系列学习javascript。
在“类型和语法”部分中,当讨论“ 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形式传递给replacer,索引(0、1和2)为k。
因此,我给出了以下代码,目的是从
22
结果中删除值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);
我期望结果是
"{"b":42,"c":"42","d":[11,33]}"
。但是,结果是
"{"b":42,"c":"42","d":[11,22,33]}"
(如您所见,属性c的索引1处的值22未被过滤掉)我想念作者怎么说吗?我想念什么吗?
最佳答案
属性名称始终是字符串。 1 !== "1"
。比较字符串而不是数字。
var a = {
b: 42,
c: "42",
d: [11, 22, 33]
};
var result = JSON.stringify(a, function(k, v) {
if (k !== "1") { // "1" not 1 here
return v;
}
});
console.log(result);
关于javascript - 将函数传递给JSON.stringify,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45329551/