1

我有一个有点像数组的对象,但它混合了索引类型(数字和字符串)。例如:

var myObj = [];
myObj[0] = 'a';
myObj[1] = 'b';
myObj[2] = 'c';
myObj['x'] = 'y';

当我使用它对它进行字符串化然后使用JSON.stringify()它再次解析它时,JSON.parse()myObj['x'] = 'y';位丢失了。我该如何克服呢?

4

2 回答 2

8

如果您有混合键,则它不再是数组。使用一个对象。

var myObj = {};
myObj[0] = 'a';
myObj[1] = 'b';
myObj[2] = 'c';
myObj.x = 'y';

如果您需要计算长度或执行其他类似数组的选项,则必须手动管理。

总是有压倒一切toJSON的,但我会避免这种情况:

myObj.toJSON = function() {
    var r = {};

    for (var k in this)
        if (this.hasOwnProperty(k))
            r[k] = this[k];

    return r;
};
于 2013-11-13T20:27:09.110 回答
3

这似乎不是一个真正的数组,而是一种更适合 JavaScript 对象的哈希映射,因此更改以下行:

var myObj = [];

对此:

var myObj = {};
于 2013-11-13T20:27:13.943 回答