我在Javascript上疯狂,因为我无法让JSON.stringify与一个简单的对象数组一起工作。我在谷歌上搜索过类似的问题,没有解决我的问题。
以下是代码:
console.log(array);
console.log(typeof array);
console.log(Array.isArray(array));
console.log(JSON.stringify(array));
这里输出:
所以第一行是正确的,这是一个对象数组。 第二行对我来说是假的,但由于Javascript似乎是正确的。第三行是正确的。第四行不正确,数组被字符串化为空对象?
我可能错过了一个愚蠢的事情,但我真的无法弄清楚是什么。
谢谢
编辑: 这是我以前如何全局创建数组
var array = [];
...
array.push(obj);
EDIT2:完整代码
sendCameras= function(cameraArray){
var message = {};
message.cameras = cameraArray;
console.log("----------------");
console.log(cameraArray);
console.log(typeof cameraArray);
console.log(Array.isArray( cameraArray));
console.log(cameraArray.length);
console.log(JSON.stringify({cameraArray:Array}));
event.source.postMessage(JSON.stringify(message), event.origin);
}
调用上一个函数的代码的第二部分:
openCamerasByNames= function(cameras){
var cameraToOpen = [];
var openCamerasByIdFromNames =function (){
external_bloc :for (let i = 0; i < cameras.length; i++){
internal_bloc :for (let j = 0; j < cameraList.cameras.length; j++){
if (cameraList.cameras[j].name == cameras[i].name){
openCameraById(cameraList.cameras[j].id);
cameraToOpen.push(cameraList.cameras[j]);
break internal_bloc;
}
}
}
}
sendCameras(cameraToOpen);
...
EDIT3:cameraList是从JSON.parse
创建的答案 0 :(得分:1)
您正在对对象{}
进行字符串化,而不是实际数组。
let cameraArray = [{myObj:"some content"}];
//wrong
console.log(JSON.stringify({cameraArray:Array}));
console.log("array? ", Array.isArray({cameraArray:Array}));
//right
console.log(JSON.stringify(cameraArray));
console.log("array? ", Array.isArray(cameraArray));
答案 1 :(得分:0)
我解决了我的问题,但我绝对不知道输出如何显示这个问题。
sendCameras调用不是好位置,它必须在openCamerasByIdFromNames的末尾,否则sendCameras将在push之前被调用。但是我不明白输出如何用一个元素显示数组。