I am storing my array as a mixture of array an array and an object. For example assume this one:
let arrObj = [];
arrObj["x"] = 12;
arrObj.push(12);
arrObj["y"] = 15;
arrObj.push(15);
// result: arrObj = [12, 15, x: 12, y: 15]
so that, I can access the value 12
even using arrObj[0]
and arrObj["x"]
. And this way, I can do a repeat for on it.
But when I stringify it, the keys x
and y
get lost:
JSON.stringify(arrObj)
// result: "[12,15]"
How should I maintain those keys and their values?
While stringifying convert it to an object using spread syntax and later parse and use Array#reduce
method to generate the array.
The array keeps the property since Array is also an object in Javascript.
let arrObj = [];
arrObj["x"] = 12;
arrObj.push(12);
arrObj["y"] = 15;
arrObj.push(15);
let json = JSON.stringify({ ...arrObj });
console.log(json);
let parsed = Object.entries(JSON.parse(json)).reduce((arr, [key, value]) => (arr[key] = value, arr), []);
console.log(parsed);
FYI : But it always better to use an Object or Map for key-value pair data, not better that's the right way in my opinion.
UPDATE 1: Or you can use a main object which keeps all additional property and within it create a property which keeps the array as well.
let arrObj = {
arr: []
};
arrObj["x"] = 12;
arrObj.arr.push(12);
arrObj["y"] = 15;
arrObj.arr.push(15);
let json = JSON.stringify(arrObj);
console.log(json);
let parsed = JSON.parse(json);
console.log(parsed);
UPDATE 2: The second approach cause issue if you are trying to set property named arr
(in my case) so keep object values in separate property.
let arrObj = {
arr: [],
obj: {}
};
arrObj.obj["x"] = 12;
arrObj.arr.push(12);
arrObj.obj["y"] = 15;
arrObj.arr.push(15);
let json = JSON.stringify(arrObj);
console.log(json);
let parsed = JSON.parse(json);
console.log(parsed);