I have an array
const arr = [
{
"id": 1,
"name": "Bitcoin",
"symbol": "BTC",
"slug": "bitcoin",
"rank": 1,
"is_active": 1,
"first_historical_data": "2013-04-28T18:47:21.000Z",
"last_historical_data": "2022-02-18T11:39:00.000Z",
"platform": null
},
{
"id": 2,
"name": "Litecoin",
"symbol": "LTC",
"slug": "litecoin",
"rank": 20,
"is_active": 1,
"first_historical_data": "2013-04-28T18:47:22.000Z",
"last_historical_data": "2022-02-18T11:39:00.000Z",
"platform": null
}
]
And I want to transform the array to this
{
"BTC": "Bitcoin",
"LTC": "Litecoin",
}
Is there a better way than this?
const result = {}
arr.reduce((accum, val) => {
Object.assign(result, { [val.symbol]: val.name });
}, {})
console.log(result)
Use Object.entries()
an each object which will return them as an array of arrays -- each sub-array will be a key/value pair ([key, value]
) then use Object.assign()
to create a new object ({[key]: value}
) to return. Then flatten it so they are all in one array.
const arr=[{id:1,name:"Bitcoin",symbol:"BTC",slug:"bitcoin",rank:1,is_active:1,first_historical_data:"2013-04-28T18:47:21.000Z",last_historical_data:"2022-02-18T11:39:00.000Z",platform:null},{id:2,name:"Litecoin",symbol:"LTC",slug:"litecoin",rank:20,is_active:1,first_historical_data:"2013-04-28T18:47:22.000Z",last_historical_data:"2022-02-18T11:39:00.000Z",platform:null}];
const conv = array => {
let objects = array.map(obj => Object.entries(obj).map(([key, val]) => Object.assign({}, {[key]: val})));
return objects.flat();
};
console.log(conv(arr));
let arr = [
{
"id": 1,
"name": "Bitcoin",
"symbol": "BTC",
"slug": "bitcoin",
"rank": 1,
"is_active": 1,
"first_historical_data": "2013-04-28T18:47:21.000Z",
"last_historical_data": "2022-02-18T11:39:00.000Z",
"platform": null
},
{
"id": 2,
"name": "Litecoin",
"symbol": "LTC",
"slug": "litecoin",
"rank": 20,
"is_active": 1,
"first_historical_data": "2013-04-28T18:47:22.000Z",
"last_historical_data": "2022-02-18T11:39:00.000Z",
"platform": null
}
]
// As suggested, here it is without having to create an initial array
let alternativeArray = arr.map((val) => {
return {[val.symbol]: val.slug}
})
console.log(alternativeArray)
Here is the answer to why the object key is being set in that format: Javascript set object key by variable
The answer is
Object.fromEntries(arr.map(({symbol, name}) => [symbol, name]))