合并具有不同属性名称的数组值

问题描述 投票:0回答:3

我有两个对象数组,分别为name valueid

数组A

ArrayA:  [{
    name: ,
    value: ,
    key: 
},
];

我还有另一个对象数组,但属性名称不同

ArrayB:  [{
    user: “userA” ,
    email: “emailA”,
    key:1: 
},
{
    user: “userB” ,
    email: “emailB”,
    key: 
},
];

现在我想要That ArrayA将具有ArrayB中的值。我的意思是用户=>名称和电子邮件=>值

ArrayA应该具有以下条目

  ArrayA:  [{
        name: “userA” ,
        value: “emailA”,
        key: 1
    },
        name: “userB” ,
        value: “emailB”,
        key: 1
    ]

我尝试使用map,但没有成功,不知道我在这里缺少什么吗?

ArrayA = ArrayB.map(((item: { name: string; value: string }) => (item.user, item.email))

我可以使用循环,有更好的方法吗?

我应该使用lodash吗?

javascript node.js lodash
3个回答
0
投票

您可以通过保持object重命名键。像这样的东西:

var obj={ user:'name', email:'value', key:'key' };
var arrayA=[];
var arrayB= [{ user: 'userA' , email: 'emailA', key:'1' }, { user: 'userB' , email: 'emailB', key:'' }];

arrayA = arrayB.map(k=>Object.fromEntries(Object.entries(k).map(([key,v])=>[obj[key],v])));

console.log(arrayA)

0
投票

最好使用传播算子和映射:

const result = [...ArrayA, ...ArrayB.map(({ key, user, email }) => ({ key, name: user, value: email }))]

0
投票

您必须使用Array concat() Method

let ArrayA = [
    {
        name: 'name1',
        value: '22',
        key: 5,
    },
];

let ArrayB = [
    {
        name: 'name2',
        value: '33',
        key: 6,
    },
];

let ArrayC = ArrayA.concat(ArrayB);

let ArrayD = ArrayA.concat([{ name: 'name2' }, { value: '33' }, { key: 6 }]);


console.log(ArrayC);
console.log(ArrayA);
console.log(ArrayD); //ref sreenshot

Array

您不能像指定的那样直接在数组中包含元素,它们需要与对象具有键值关系

© www.soinside.com 2019 - 2024. All rights reserved.