无法在JS中对一个对象数组进行字符串化

时间:2018-03-23 15:02:27

标签: javascript

我在Javascript上疯狂,因为我无法让JSON.stringify与一个简单的对象数组一起工作。我在谷歌上搜索过类似的问题,没有解决我的问题。

以下是代码:

console.log(array);
console.log(typeof array);
console.log(Array.isArray(array));
console.log(JSON.stringify(array));

这里输出:

Console output

所以第一行是正确的,这是一个对象数组。 第二行对我来说是假的,但由于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

创建的

2 个答案:

答案 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之前被调用。但是我不明白输出如何用一个元素显示数组。