我有一个有点像数组的对象,但它混合了索引类型(数字和字符串)。例如:
var myObj = [];
myObj[0] = 'a';
myObj[1] = 'b';
myObj[2] = 'c';
myObj['x'] = 'y';
当我使用它对它进行字符串化然后使用JSON.stringify()
它再次解析它时,JSON.parse()
该myObj['x'] = 'y';
位丢失了。我该如何克服呢?
我有一个有点像数组的对象,但它混合了索引类型(数字和字符串)。例如:
var myObj = [];
myObj[0] = 'a';
myObj[1] = 'b';
myObj[2] = 'c';
myObj['x'] = 'y';
当我使用它对它进行字符串化然后使用JSON.stringify()
它再次解析它时,JSON.parse()
该myObj['x'] = 'y';
位丢失了。我该如何克服呢?
如果您有混合键,则它不再是数组。使用一个对象。
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;
};
这似乎不是一个真正的数组,而是一种更适合 JavaScript 对象的哈希映射,因此更改以下行:
var myObj = [];
对此:
var myObj = {};