在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,谢谢!
答案 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是指针在这里...这可能是一个问题,但它对你的情况来说似乎没有。)