Javascript `stringify`省略数组中的自定义键

Javascript `stringify`省略数组中的自定义键,javascript,arrays,json,stringification,Javascript,Arrays,Json,Stringification,我将数组存储为数组、数组和对象的混合体。例如,假设这个: let arrObj = []; arrObj["x"] = 12; arrObj.push(12); arrObj["y"] = 15; arrObj.push(15); // result: arrObj = [12, 15, x: 12, y: 15] 因此,即使使用arrObj[0]和arrObj[x],我也可以访问值12。这样,我可以在上面重复一遍 但是当我把它串起来时,键x和y就丢失了: JSON.stringify(ar

我将数组存储为数组、数组和对象的混合体。例如,假设这个:

let arrObj = [];
arrObj["x"] = 12;
arrObj.push(12);
arrObj["y"] = 15;
arrObj.push(15);

// result: arrObj = [12, 15, x: 12, y: 15]
因此,即使使用arrObj[0]和arrObj[x],我也可以访问值12。这样,我可以在上面重复一遍

但是当我把它串起来时,键x和y就丢失了:

JSON.stringify(arrObj)
// result: "[12,15]"

如何维护这些键及其值?

数组应仅包含数字索引值。如果除了值之外还需要关键点,请使用对象:

常量obj={}; obj.x=12; obj[0]=12; 对象y=15; obj[1]=15; console.logJSON.stringifyobj; 对于let i=0;我在obj;i++{ console.logobj[i];
} 数组应仅包含数字索引值。如果除了值之外还需要关键点,请使用对象:

常量obj={}; obj.x=12; obj[0]=12; 对象y=15; obj[1]=15; console.logJSON.stringifyobj; 对于let i=0;我在obj;i++{ console.logobj[i];
} 在字符串化过程中,使用将其转换为对象,然后使用parse和use方法生成数组

数组保留该属性,因为数组也是Javascript中的一个对象

设arrObj=[]; arrObj[x]=12; arrObj.12; arrObj[y]=15; arrObj.15; 让json=json.stringify{…arrObj}; console.logjson; 让parsed=Object.entriesJSON.parsejson.reducearr[key,value]=>arr[key]=value,arr,[];
console.logparsed 在字符串化过程中,使用将其转换为对象,然后使用parse和use方法生成数组

数组保留该属性,因为数组也是Javascript中的一个对象

设arrObj=[]; arrObj[x]=12; arrObj.12; arrObj[y]=15; arrObj.15; 让json=json.stringify{…arrObj}; console.logjson; 让parsed=Object.entriesJSON.parsejson.reducearr[key,value]=>arr[key]=value,arr,[];
console.logparsed 下面是一个奇特的单衬里解决方案:

设arrObj=[]; arrObj[x]=12; arrObj.12; arrObj[y]=15; arrObj.15; var string=JSON.stringifyObject.keysarrObj.reduceacc,cur=>acc[cur]=arrObj[cur],acc,{};
console.logstring 下面是一个奇特的单衬里解决方案:

设arrObj=[]; arrObj[x]=12; arrObj.12; arrObj[y]=15; arrObj.15; var string=JSON.stringifyObject.keysarrObj.reduceacc,cur=>acc[cur]=arrObj[cur],acc,{};
console.logstring;我希望它是一个数组,让foreach使用它。这不是我的答案。如果要在字符串化过程中保留任意键,请改用对象,然后在需要使用forEach时将其转换为数组。字符串化数组不能有任意的键值对。如果需要通过序列化保存任意键-值对,则必须使用对象,而不是数组。如果这样做,结果将不是有效的JSON,并且只能由您构建的自定义解析器解析,这将是一个困难且不好的主意。如果是自定义解析器,则根据定义,您没有处理JSON,因为JSON解析不起作用。另外,想要foreach数组是违反标准的一个不好的理由。我希望它是一个让foreach使用的数组。这不是我的答案。如果要在字符串化过程中保留任意键,请改用对象,然后在需要使用forEach时将其转换为数组。字符串化数组不能有任意的键值对。如果需要通过序列化保存任意键-值对,则必须使用对象,而不是数组。如果这样做,结果将不是有效的JSON,并且只能由您构建的自定义解析器解析,这将是一个困难且不好的主意。如果是自定义解析器,则根据定义,您没有处理JSON,因为JSON解析不起作用。另外,想要foreach数组是违反标准的错误理由。这不是一个有效的JSON字符串:[12,15,'x':12,'y':15]。即使输出它,也无法将其解析为JSON。所以不清楚在没有某种转换的情况下这是如何工作的。这足以让这个结构对我自己有效。我的意思是,在另一端,我自己正在捕捉这个值,这样我也可以操纵这个值。[…arrObj.values]/[12,15]是实际的结果。不要混淆x和y。它们只是arrObj的财产array@ConductedClever然后Pranav C Balan使用object更新的答案是abt,当然是@AswinKumar。谢谢。这不是有效的JSON字符串:[12,15,'x':12,'y':15]。即使输出它,也无法将其解析为JSON。所以不清楚在没有某种转换的情况下这是如何工作的。这足以让这个结构对我自己有效。我的意思是,在另一端,我自己正在捕捉这个值,这样我也可以操纵这个值。[…arrObj.values]/[12,15]是实际的结果。不要混淆x和y。它们只是arrObj的财产array@ConductedClever然后Pranav C Balan使用object更新的答案是abt,当然是@AswinKumar。谢谢
汉克斯。Map在接受键值对和重复但不可序列化方面很好。第二个解决方案也很好,但它会破坏我的扩展方法:Array.prototype.pushNamed=function key,value{this[key]=value;this.pushvalue;return this;}@ConductedClever:像Object.prototype.pushNamed=function key,value{this[key]一样重写它=值;this.arr.pushvalue;返回this;}@conductedcleer@conductedcleer:对于新方法,它类似于Object.prototype.pushNamed=函数键,值{this.obj[key]=value;this.arr.pushvalue;返回此;}谢谢。Map在接受键值对和重复但不可序列化方面很好。第二个解决方案也很好,但它会破坏我的扩展方法:Array.prototype.pushNamed=function key,value{this[key]=value;this.pushvalue;return this;}@ConductedClever:像Object.prototype.pushNamed=function key,value{this[key]一样重写它=值;this.arr.pushvalue;返回this;}@conductedcleer@ConductedClever:对于新方法,它将类似于Object.prototype.pushNamed=函数键,值{this.obj[key]=value;this.arr.pushvalue;返回this;}虽然顺序对我来说并不重要,但字符串化的对象并不是期望的。谢谢。虽然订单对我来说并不重要,但是串起来的东西不是我想要的。谢谢