所以我的电话返回了类似的内容:
data:
{
nameData: 'Test33333',
emailData: email@email.com,
urlLink: link.com
additionalDetails: [
{
field: 'email',
value: 'other@email.com'
},
{
field: 'name',
value: 'name1223'
}
]
}
现在,我想创建一个函数,该函数将采用传递的参数(数据)并创建对象数组,如下所示。应该以更通用的方式完成
。数组输出期望值:
fullData = [
{
name: 'data_name'
value: 'Test33333'
},
{
name: 'data_email',
value: 'email@email.com'
},
{
name: 'data_url',
value: 'Link.com'
},
extraData: [
//we never know which one will it return
]
];
应在函数中使用名称来完成,例如:
generateDataFromObj(data)
如此
generateDataArrFromObj = (data) => {
//logic here that will map correctly the data
}
如何实现?谢谢,我不是真的精通JavaScript。
答案 0 :(得分:0)
只需在对象键上运行一个映射,这将返回由每个项目填充的数组,然后在func映射中对每个项目运行,构建一个对象,如下所示:
map_
答案 1 :(得分:0)
假设您将数据属性键保存在camelCase中,那么它将适用于您添加的任何数据,而不仅仅是示例中的数据。在这里,我使用了planetLink
。使用初始的空数组reduce
遍历对象键),从现有属性键中提取新键名,然后将每个新对象连接到返回的数组中。
const data = { nameData: 'Test33333', emailData: 'email@email.com', planetLink: 'Mars' };
function generateDataArrFromObj(data) {
const regex = /([a-z]+)[A-Z]/;
// `reduce` over the object keys
return Object.keys(data).reduce((acc, c) => {
// match against the lowercase part of the key value
// and create the new key name `data_x`
const key = `data_${c.match(regex)[1]}`;
return acc.concat({ name: key, value: data[c] });
}, []);
}
console.log(generateDataArrFromObj(data));