Ajax / socket:javascript数组对象属性丢失

时间:2014-08-24 01:37:27

标签: javascript ajax node.js sockets object

在Javascript中,array []也可以拥有属性,因为它是一个对象。但是,如果通过ajax / socket.io将此对象发送到服务器,则它的数组内容会保留,但其属性会丢失。

例如:

var arr = ['john','peter'];
arr.a = 1;
console.log(arr.a); // 1

通过ajax发送此对象后,服务器看到了什么:

console.log(arr.a); // undefined

有谁知道为什么?我使用Node.JS作为服务器btw,谢谢!

1 个答案:

答案 0 :(得分:1)

正如其他人所提到的,JSON.stringify()并没有序列化数组属性,即使它们没有继承"来自原型。

如果您正在使用jquery,快速修复就是使用$ .extend({},arr) http://jsfiddle.net/15vn4shu/1/

如果没有,您可以编写一个函数来轻松转换为对象:

function convertArrToObj(arr){
     //assuming typeof arr === 'object', put in guards if needed
     var obj = {};
     for (var key in arr){
          if (arr.hasOwnProperty(key))
               obj[key]=arr[key];
     }
     return obj;
}

就个人而言,我只是创建一个对象,其属性是此数组的值,无论您需要什么,都可以添加到此父对象。我不确定这在您的用例中是否可行(我必须查看代码)。

var toSend = {data:arr, customProp:'value'};

简单,由所有版本的js支持,不需要框架,也没有O(n)运行来进行转换(arr是指针在这里...这可能是一个问题,但它对你的情况来说似乎没有。)