我在JS上尝试其他方法以了解它们的性能。
为了测试,我想了解如果我这样做
JSON.stringify(something)
直接与使用Map进行比较。
直接通过 JSON.stringify(something)
var rockets = [
{ country:'Russia', launches:32 },
{ country:'US', launches:23 },
{ country:'China', launches:16 },
{ country:'Europe(ESA)', launches:7 },
{ country:'India', launches:4 },
{ country:'Japan', launches:3 }
];
console.log(JSON.stringify(rockets))
我在控制台中的位置
[{"country":"Russia","launches":32},{"country":"US","launches":23},{"country":"China","launches":16},{"country":"Europe(ESA)","launches":7},{"country":"India","launches":4},{"country":"Japan","launches":3}]
与Map
的对比我知道了
var rockets = [
{ country:'Russia', launches:32 },
{ country:'US', launches:23 },
{ country:'China', launches:16 },
{ country:'Europe(ESA)', launches:7 },
{ country:'India', launches:4 },
{ country:'Japan', launches:3 }
];
console.log(rockets.map(d => JSON.stringify(d)))
我在哪里得到这样的东西
["{"country":"Russia","launches":32}", "{"country":"US","launches":23}", "{"country":"China","launches":16}", "{"country":"Europe(ESA)","launches":7}", "{"country":"India","launches":4}", "{"country":"Japan","launches":3}"]
现在,我试图理解代码和JSON.stringify(something)
都有意义,但是当我查看Map
时,我发现在"
之后添加了[
我不知道它来自哪里?
Chrome控制台和stackoverflow的结果也有所不同,有人可以解释一下为什么我在stackoverflow结果的\
之前看到"
吗?
示例[ "{\"country\":\"Russia\",\"launches\":32}",
总结一下,我的主要问题是.map如何与json字符串化一起使用?
答案 0 :(得分:1)
第一个JSON.stringify(rockets)
产生单个长字符串,该字符串包含可以用JSON.parse
转换为对象数组的序列化数据。
第二个rockets.map(d => JSON.stringify(d)
产生一个数组,其每个项目都是一个字符串,可以反序列化为一个小对象。
下面的代码中"
之前的反斜杠有点令人困惑,这是因为堆栈控制台使用"
分隔字符串。如果使用'
-'
会更清楚,最下面的结果看起来像
[
'{"country": "Russia","launches": 32}',
'{"country": "US","launches": 23}',
'{"country": "China","launches": 16}',
// ...
]
这是第二个代码段产生的完全相同的数组
var rockets = [
{ country:'Russia', launches:32 },
{ country:'US', launches:23 },
{ country:'China', launches:16 },
{ country:'Europe(ESA)', launches:7 },
{ country:'India', launches:4 },
{ country:'Japan', launches:3 }
];
console.log(rockets.map(d => JSON.stringify(d)))
除了以易于阅读的格式显示外,因为数组项(字符串)用'
分隔,因此字符串中的文字"
不需要先用反斜杠转义。
(就像一条线
const str = 'foo'
等同于使用
const str = "foo"
,以及操作方式
const str2 = 'fo"o'
等同于
const str2 = "fo\"o"
:也就是说,要表示要用作字符串定界符的相同字符,必须先在其前面加上反斜杠)
请注意,JSON字符串要求键和字符串值必须用双引号"
括起来,而对象文字(例如上面显示的)则不需要。
答案 1 :(得分:1)
因此,您试图区分JSON.stringify(something)
和.map(JSON.stringify)
的是,第一个创建一个字符串,第二个创建一个字符串列表。
使用"
后[
之后的.map
是因为您的控制台试图说console.log
中包含的是一个字符串列表。而在JSON.stringify(something)
的结果中,整个输出是一个字符串,因此整个输出以"
开头和结尾。
StackOverflow与Chrome的输出\
之间的区别只是一个转义字符。