使用混合索引类型对类似数组的对象进行Stringify

时间:2013-11-13 20:24:32

标签: javascript json

我有一个类似于数组的对象,但它有多种索引类型(数字和字符串)。例如:

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

当我使用JSON.stringify()对其进行字符串化,然后使用JSON.parse()再次对其进行解析时,myObj['x'] = 'y';位将丢失。我怎么能克服这个?

2 个答案:

答案 0 :(得分: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;
};

答案 1 :(得分:3)

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

var myObj = [];

对此:

var myObj = {};