[英]How to convert the object which contains multiple array into an array of objects in javascript?
[英]How to convert an object to array of multiple objects in javascript
我有一个 object 数据,我想拆分它的对象数组
let data = {
"education_center-266": "Software House x",
"education_center-267": "Learning Academy xyz",
"end_date-266": "2022-01-26",
"end_date-267": "2021-01-22",
"start_date-266": "2021-01-26",
"start_date-267": "1998-11-26",
"title-266": "Web Developer",
"title-267": "Teacher",
}
我尝试了不同的方法,但无法达到我想要的结果..结果应该是
[
{
id: "266",
education_center: "Software House x",
title: "Web Developer",
start_date: "2021-01-26",
end_date: "2022-01-26",
},
{
id: "267",
education_center: "Learning Academy xyz",
title: "Teacher",
start_date: "1998-11-26",
end_date: "2021-01-22",
},
]
const myObjects = {};
Object.keys(data).map((key) => {
const splitKey = key.split('-');
const elemId = splitKey[1];
const realKey = splitKey[0];
if (!myObjects[ elemId ]) {
myObjects[ elemId ] = { id: elemId }; // Create entry
}
myObjects[ elemId ][ realKey ] = data[ key ];
});
// Turn into array
const myObjectsToArray = Object.values(myObjects);
// Or use the myObjects as a key/value store with ID as index
const selectedElement = myObjects[ myID ];
const data = {
"education_center-266": "Software House x",
"education_center-267": "Learning Academy xyz",
"end_date-266": "2022-01-26",
"end_date-267": "2021-01-22",
"start_date-266": "2021-01-26",
"start_date-267": "1998-11-26",
"title-266": "Web Developer",
"title-267": "Teacher"
};
const results = [];
function splitKey(key) {
const indexOfDelimiter = key.lastIndexOf("-");
return {
id: key.substring(indexOfDelimiter + 1),
key: key.substring(0, indexOfDelimiter)
};
}
function getItemFromResults(id) {
return results.find((r) => r.id === id);
}
function processKeyValuePair(id, key, value) {
const item = getItemFromResults(id);
if (!item) {
results.push({ id, [key]: value });
return;
}
item[key] = value;
}
for (const k in data) {
const { id, key } = splitKey(k);
const value = data[k];
processKeyValuePair(id, key, value);
}
这里有一个稍微不同的解决方案,首先获取所有唯一id's
,然后通过循环Object.entries
来构建result
数组。
let data = { "education_center-266": "Software House x", "education_center-267": "Learning Academy xyz", "end_date-266": "2022-01-26", "end_date-267": "2021-01-22", "start_date-266": "2021-01-26", "start_date-267": "1998-11-26", "title-266": "Web Developer", "title-267": "Teacher", } const ids= [...new Set(Object.keys(data).map((el)=>{ return el.split('-')[1] }))]; let result = []; ids.forEach((i)=>{ let obj={id: i} Object.entries(data).forEach((el)=>{ if(el[0].includes(i)) obj[el[0].split('-')[0]]=el[1]; }) result.push(obj) }) console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.