Angular 按角度项目的键名连接两个数组

Angular 按角度项目的键名连接两个数组,angular,typescript,Angular,Typescript,我对angular和typescript很陌生,我遇到了一个问题。我有两个数组,需要根据它们的category-id合并成一个数组。两个数组都包含一些其他数组没有的值。这些数组将根据用户输入而改变,因此我无法提前知道每个数组的长度。我知道“category id”将始终包含在每个数组中,但是,这就是为什么我希望在此基础上合并两个数组。谢谢你的帮助 例如: arr1 = [ {category-id: car, category-value: mustang}, {category-id:

我对angular和typescript很陌生,我遇到了一个问题。我有两个数组,需要根据它们的category-id合并成一个数组。两个数组都包含一些其他数组没有的值。这些数组将根据用户输入而改变,因此我无法提前知道每个数组的长度。我知道“category id”将始终包含在每个数组中,但是,这就是为什么我希望在此基础上合并两个数组。谢谢你的帮助

例如:

arr1 = [
{category-id: car, category-value: mustang},    
{category-id: convertible, category-value: softTop}
]
arr2 = [
{category-id: car, category-feature: convertible},
{category-id: truck, category-value: ranger},
{category-id: convertible, category-feature: blue}
]
预期结果:

arr3 = [
{category-id: car, category-value:mustang, category-feature: convertible},
{category-id: truck, category-value: ranger},
{category-id: convertible, category-value: softTop, category-feature: blue}
]

给你。这不是最优雅的解决方案,您可以使用lodash或Typescript LINQ或Immutable.js在两行代码中完成,但它是纯粹的

const arr1 = [
    { categoryid: 'car', categoryvalue: 'mustang'},    
    { categoryid: 'convertible', categoryvalue: 'softTop'}
]
const arr2 = [
    { categoryid: 'car', categoryfeature: 'convertible'},
    { categoryid: 'truck', categoryvalue: 'ranger'},
    { categoryid: 'convertible', categoryfeature: 'blue'}
]

const arr3 = []
for (let x of arr1)
{
    const found = arr2.filter(y => y.categoryid === x.categoryid).shift();
    if (found)
       arr3.push({ ...x, ...found });
}
arr3.push(... arr2.filter(z=> arr1.map(x=>x.categoryid).indexOf(z.categoryid) === -1 ))

这里的诀窍是使用操作符。它将按字段名自动合并两个对象

那么你尝试过什么,它到底有什么问题?你的问题是什么?做了我所需要的。那个播报员对我来说是新来的。谢谢你的帮助!不客气。快乐编码。别忘了对答案投赞成票。