gpt4 book ai didi

javascript - Ajax /套接字: javascript array object properties get lost

转载 作者:太空宇宙 更新时间:2023-11-04 01:03:04 25 4
gpt4 key购买 nike

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

例如:

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

通过ajax发送该对象后,服务器看到的内容:

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

有人知道为什么吗?顺便说一句,我正在使用 Node.JS 作为服务器,谢谢!

最佳答案

正如其他人提到的,JSON.stringify() 不会序列化数组属性,即使它们不是从 proto“继承”的。

如果您使用 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在这里是一个指针......这可能是一个陷阱,但它似乎不适合你的情况)。

关于javascript - Ajax /套接字: javascript array object properties get lost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25467823/

25 4 0
文章推荐: css - 删除 Navbar 和 Navbar.Header 之间的
文章推荐: C 全局在 ISR 中声明
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com