Ajax/socket:javascript数组对象属性丢失
在Javascript中,数组[]也可以有属性,因为它是一个对象。但是,如果您通过ajax/socket.io将此对象发送到服务器,它的数组内容将保留,但其属性将丢失 例如:Ajax/socket:javascript数组对象属性丢失,javascript,ajax,node.js,sockets,object,Javascript,Ajax,Node.js,Sockets,Object,在Javascript中,数组[]也可以有属性,因为它是一个对象。但是,如果您通过ajax/socket.io将此对象发送到服务器,它的数组内容将保留,但其属性将丢失 例如: var arr = ['john','peter']; arr.a = 1; console.log(arr.a); // 1 通过ajax发送此对象后,服务器将看到: console.log(arr.a); // undefined 有人知道为什么吗?我正在使用Node.JS作为服务器btw,谢谢 正如其他人提到的,
var arr = ['john','peter'];
arr.a = 1;
console.log(arr.a); // 1
通过ajax发送此对象后,服务器将看到:
console.log(arr.a); // undefined
有人知道为什么吗?我正在使用Node.JS作为服务器btw,谢谢 正如其他人提到的,JSON.stringify()不会序列化数组属性,即使它们不是从proto“继承”的 如果您使用的是jquery,一个快速修复方法就是只使用$.extend({},arr) 如果没有,您可以编写一个函数来轻松地转换为对象:
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;
}
就我个人而言,我只需要创建一个属性为该数组值的对象,向该父对象添加您需要的任何内容。不过,我不确定这在您的用例中是否可行(我必须查看代码)
Easy,由所有版本的js支持,不需要框架,也不需要运行O(n)来进行转换(arr在这里是一个指针…这可能是一个问题,但对于您的情况来说似乎不是这样)。什么是
console.log(arr)代码>显示?另外,一定要提供一个SSCCE来复制行为。假设您使用json作为传输格式,它不会序列化除数字索引以外的属性。@Musa,那么有没有办法做到这一点?不要使用数组,使用常规对象。使用合理的数据结构。
var toSend = {data:arr, customProp:'value'};