Js有一个我正在使用的内置解析函数:JSON.parse。重新格式化我无法绕过头脑。例如,如果我想从NASA API获取所有星星作为JSON。这给了我一个包含所有星星的大量列表,其中一个条目如下:
{
"absmag": 4.85,
"appmag": -26.72,
"colorb_v": 0.65,
"created_at": "2014-11-08T07:30:49.614Z",
"dcalc": 0.0,
"distly": 0.0,
"hipnum": 0.0,
"id": 1,
"label": "Sun",
"lum": 0.8913,
"plx": 0.0,
"plxerr": 0.0,
"speed": 0.0,
"texnum": 1.0,
"updated_at": "2014-11-08T07:30:49.614Z",
"vx": 0.0,
"vy": 0.0,
"vz": 0.0,
"x": 0.0,
"y": 0.0,
"z": 0.0
}
然后我删除了"标签"搜索价值:
window.database.forEach(function(el) {
var starNameArray = el.label;
})
这给了我一个明星标签的清单。我需要将此列表转换为此表单:
[ 'thing1', 'thing2', 'thing3' ]
我尝试使用这样的东西:
console.log("'" + starNameArray.join("','") + "'");
但我收到错误:"未捕获TypeError:starNameArray.join不是函数"
知道为什么吗?我在这边的某个地方犯了一个愚蠢的错误吗?
答案 0 :(得分:1)
var starNameArray = [];
window.database.forEach(function(el) {
starNameArray.push(el.label);
});
console.log(starNameArray.join(","));
答案 1 :(得分:0)
根据您提供的代码starNameArray
只是存储一个字符串值,您尝试创建一个数组,然后将每个标签推送到数组中,如
var starNameArray = [];
window.database.forEach(function(el){
starNameArray.push(el.label);
})
执行此操作后,您将拥有一系列元素。
join
方法将创建一个元素字符串而不是实际数组。
答案 2 :(得分:0)
看起来你在foreach中声明starNameArray并将starNameArray设置为el.label,所以它是一个基于你JSON示例的字符串。此外,它的范围仅在foreach中,因此假设您的console.log在该函数之外,并且未在其他地方声明,则starNameArray将是未定义的。 @edrain刚刚发布了修复这些问题的代码。