如果子数组具有动态键值对对象,则在javascript中展平数组对象

如果子数组具有动态键值对对象,则在javascript中展平数组对象,javascript,typescript,Javascript,Typescript,如何获取此数组的平面数组对象?我想将“所有关键点”值从子数组对象移动到其父对象: [ { "Attributes": [ { "Name": "profile", "Value": "UI" }, { "Name": "phone_number", "Value": "+91123456789" }, { "Name": "email",

如何获取此数组的平面数组对象?我想将“所有关键点”值从子数组对象移动到其父对象:

[
  {
    "Attributes": [
      {
        "Name": "profile",
        "Value": "UI"
      },
      {
        "Name": "phone_number",
        "Value": "+91123456789"
      },
      {
        "Name": "email",
        "Value": "to_test@test.in"
      }
    ],
    "UserCreateDate": 1524465619.163,
    "Username": "neeraj"
  }
]
必需的JSON:

[
  {
    "UserCreateDate": 1524465619.163,
    "Username": "neeraj",
    "profile": "UI",
    "phone_number": "+91123456789",
    "email": "to_test@test.in"
  }
]

可以使用迭代对象键/值的递归函数展平:

const输入={
“PaginationToken”:“字符串”,
“用户”:[{
“属性”:[{
“名称”:“字符串”,
“值”:“字符串”
}],
“已启用”:“布尔值”,
“MFA选项”:[{
“AttributeName”:“字符串”,
“DeliveryMedium”:“字符串”
}],
“UserCreateDate”:“编号”,
“UserLastModifiedDate”:“编号”,
“用户名”:“字符串”,
“用户状态”:“字符串”
}]
};
const getKeyValsFromObj=(obj)=>Object.entries(obj)
.reduce((累计,[键,值])=>{
if(数组.isArray(值)){
forEach(innerObj=>accum=[…accum,…getKeyValsFromObj(innerObj)]);
}否则累计推送([键,值]);
返回累计;
}, []);
const keyvals=getKeyValsFromObj(输入);
const finalObj=keysVals.reduce((对象[key,val])=>{
obj[key]=val;
返回obj;
}, {});

console.log(finalObj)您可以使用迭代对象的键/值的递归函数展平:

const输入={
“PaginationToken”:“字符串”,
“用户”:[{
“属性”:[{
“名称”:“字符串”,
“值”:“字符串”
}],
“已启用”:“布尔值”,
“MFA选项”:[{
“AttributeName”:“字符串”,
“DeliveryMedium”:“字符串”
}],
“UserCreateDate”:“编号”,
“UserLastModifiedDate”:“编号”,
“用户名”:“字符串”,
“用户状态”:“字符串”
}]
};
const getKeyValsFromObj=(obj)=>Object.entries(obj)
.reduce((累计,[键,值])=>{
if(数组.isArray(值)){
forEach(innerObj=>accum=[…accum,…getKeyValsFromObj(innerObj)]);
}否则累计推送([键,值]);
返回累计;
}, []);
const keyvals=getKeyValsFromObj(输入);
const finalObj=keysVals.reduce((对象[key,val])=>{
obj[key]=val;
返回obj;
}, {});
console.log(finalObj)
您可以使用
数组#映射
遍历数组,然后使用
数组#映射
遍历
属性
并使用
对象。分配
以键值格式创建包含所有键和
属性
对象的对象,并返回此对象

const data=[{“Attributes”:[{“Name”:“profile”,“Value”:“UI”},{“Name”:“phone_number”,“Value”:“+91123456789”},{“Name”:“email”,“Value”:“to”_test@test.in“}],“UserCreateDate”:1524465619.163,“Username”:“neeraj”}],
结果=data.map({Attributes,UserCreateDate,Username})=>Object.assign({UserCreateDate,Username};
控制台日志(结果)
您可以使用
数组#映射
遍历数组,然后使用
数组#映射
遍历
属性
并使用
对象。分配
以键值格式创建包含所有键和
属性
对象的对象,并返回此对象

const data=[{“Attributes”:[{“Name”:“profile”,“Value”:“UI”},{“Name”:“phone_number”,“Value”:“+91123456789”},{“Name”:“email”,“Value”:“to”_test@test.in“}],“UserCreateDate”:1524465619.163,“Username”:“neeraj”}],
结果=data.map({Attributes,UserCreateDate,Username})=>Object.assign({UserCreateDate,Username};

控制台日志(结果)请分享预期输出的外观:嵌套Json:[{“Attributes”:[{“Name”:“email”,“Value”:to@to.com“},{”Name:“username”,“Value:“Jack”}],“Enabled”:true,“UserCreateDate”:1524491609.287}]必需的JSON:[{“电子邮件”:to@to.com“,”用户名“:”Jack“,”Enabled“:true,“UserCreateDate”:1524491609.287,“UserLastModifiedDate”:1524492105.53,“UserStatus:”强制更改密码“,”用户名“:”sachhida“}]在人们完成这项工作并提交答案后,您完全更改了问题。我只是删除了我的。祝你好运。请分享预期输出的样子我希望是这样的:嵌套Json:[{“Attributes”:[{“Name”:“email”,“Value”:to@to.com“},{”Name:“username”,“Value:“Jack”}],“Enabled”:true,“UserCreateDate”:1524491609.287}]必需的JSON:[{“电子邮件”:to@to.com“,”用户名“:”Jack“,”Enabled“:true,“UserCreateDate”:1524491609.287,“UserLastModifiedDate”:1524492105.53,“UserStatus:”强制更改密码“,”用户名“:”sachhida“}]在人们完成这项工作并提交答案后,您完全更改了问题。我只是删除了我的。祝你好运。示例Json当前Json=[{“Attributes”:[{“Name”:“profile”,“Value”:“UI”},{“Name”:“phone_number”,“Value”:“+91123456789”},{“Name”:“email”,“Value”:“to”_test@test.in“}],“UserCreateDate”:1524465619.163,“用户名”:“neeraj”}]必需的JSON:[{“UserCreateDate”:1524465619.163,“用户名”:“neeraj”,“配置文件”:“UI”,“电话号码”:“+91123456789”,“电子邮件”:“收件人”_test@test.in“}]示例Json当前Json=[{”属性“:[{”名称“:“配置文件”,“值”:“UI”},{”名称“:“电话号码”,“值”:“+91123456789”},{”名称“:“电子邮件”,“值”:“收件人”_test@test.in}],“UserCreateDate”:1524465619.163,“Username”:“neeraj”}]必需的JSON:[{“UserCreateDate”:1524465619.163,“用户名”:“neeraj”,“个人资料”:“用户界面”,“电话号码”:“+91123456789”,“电子邮件”:“收件人”_test@test.in" } ]