根据某些条件通过合并对象数组来创建新数组

问题描述 投票:-1回答:2

我有两个对象数组。

const array1=[
{type:'A',name:'word1'},
{type:'B',name:'word2'},
{type:'C',name:'word3'},
{type:'D',name:'word4'},
{type:'E',name:'word5'},
{type:'F',name:'word6'},
]

const array2=[
{id:1,text:'text1',type:A},
{id:2,text:'text2',type:B},
{id:3,text:'text3',type:C},
{id:4,text:'text4',type:D},
{id:5,text:'text5',type:D},
{id:6,text:'text6',type:E},
{id:7,text:'text7',type:E},
{id:8,text:'text8',type:B},
]

有些类型在array1中,但不在数组2中。我想通过以下方式显示newArray:-

const newArray=[
{id:1,text:'text1',type:A,name:'word1'},
{id:2,text:'text2',type:B,name:'word2'},
{id:3,text:'text3',type:C,name:'word3'},
{id:4,text:'text4',type:D,name:'word4'},
{id:5,text:'text5',type:D,name:'word4'},
{id:6,text:'text6',type:E,name:'word5'},
{id:7,text:'text7',type:E,name:'word5'},
{id:8,text:'text8',type:B,name:'word2'},
]

我已经尝试过:-

var newArray=[],
newArray=array1.map(x => Object.assign(x, array2.filter(y => y.type == x.type)));

但是我没有获得所需格式的输出。

javascript ecmascript-6
2个回答
0
投票

您可以将array1转换为由类型键入的Map,并存储Map作为其值。然后,您可以name您的.map()根据.map()中的关联值向每个对象添加array2属性

name

0
投票

尝试:


0
投票

最有效的方法是从Array1中创建对象Map,以便您可以在恒定时间内搜索。发布您可以映射到数组并使用传播语法返回更新的对象]


0
投票

您必须映射到const array1=[ {type:'A',name:'word1'}, {type:'B',name:'word2'}, {type:'C',name:'word3'}, {type:'D',name:'word4'}, {type:'E',name:'word5'}, {type:'F',name:'word6'}, ] const array2=[ {id:1,text:'text1',type:'A'}, {id:2,text:'text2',type:'B'}, {id:3,text:'text3',type:'C'}, {id:4,text:'text4',type:'D'}, {id:5,text:'text5',type:'D'}, {id:6,text:'text6',type:'E'}, {id:7,text:'text7',type:'E'}, {id:8,text:'text8',type:'B'}, ] const a = array2.map(arr => { const {name} = array1.filter(iArr => iArr.type === arr.type)[0]; return {...arr, name} }) 上以给出一个将两个数组连接在一起的新数组,如下所示:

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