Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从其他数组按id查找数组中的元素_Javascript_Arrays_Find - Fatal编程技术网

Javascript 从其他数组按id查找数组中的元素

Javascript 从其他数组按id查找数组中的元素,javascript,arrays,find,Javascript,Arrays,Find,我有两个阵列: address—id为的对象的数组 拾取-id为的对象数组 我需要通过id将这些数组连接到1中 例如: address = [ {id: "123", name: "any city street"}, {id: "124", name: "any city street"}, {id: "125", name: "any city street"}

我有两个阵列:

address—id为的对象的数组

拾取-id为的对象数组

我需要通过id将这些数组连接到1中

例如:

address = [
  {id: "123", name: "any city street"},
  {id: "124", name: "any city street"},
  {id: "125", name: "any city street"},
  {id: "126", name: "any city street"}
];

pickups = [
  {id: "123", time: "10:20"},
  {id: "124", time: "11:30"},
  {id: "125", time: "12:00"},
  {id: "126", time: "12:20"}
];

我需要通过id连接它,结果如下:

{id: "124", name: "name smth", time: "11:30"}
我的意思是将这两个数组映射为一个

const地址=[
{id:“123”,名称:“任何城市街道”},
{id:“124”,名称:“任何城市街道”},
{id:“125”,名称:“任何城市街道”},
{id:“126”,名称:“任何城市街道”}
];
常量拾取=[
{id:“123”,时间:“10:20”},
{id:“124”,时间:“11:30”},
{id:“125”,时间:“12:00”},
{id:“126”,时间:“12:20”}
];
const result=address.map((rec,index)=>{
返回{…rec,…pickups[index]}
})
console.log(结果)
地址=[
{id:“123”,名称:“任何城市街道”},
{id:“124”,名称:“任何城市街道”},
{id:“125”,名称:“任何城市街道”},
{id:“126”,名称:“任何城市街道”}
];
皮卡=[
{id:“123”,时间:“10:20”},
{id:“124”,时间:“11:30”},
{id:“125”,时间:“12:00”},
{id:“126”,时间:“12:20”}
];
const result=pickups.map(pickup=>{
让match=address.find(addr=>addr.id==pickup.id);
返回{
id:picking.id,
时间:接机时间,
name:match.name,
}
})
控制台日志(结果)您可以执行以下操作:

let地址=[
{id:“123”,名称:“任何城市街道”},
{id:“124”,名称:“任何城市街道”},
{id:“125”,名称:“任何城市街道”},
{id:“126”,名称:“任何城市街道”}
];
让皮卡车=[
{id:“123”,时间:“10:20”},
{id:“124”,时间:“11:30”},
{id:“125”,时间:“12:00”},
{id:“126”,时间:“12:20”}
];
设obj={};

下面的代码片段可以帮助您

const地址=[
{id:'123',name:'any city street'},
{id:'126',name:'any city street'},
{id:'124',name:'any city street'},
{id:'125',name:'any city street'},
{id:'127',name:'any city street'}
]
常量拾取=[
{id:'126',时间:'12:20'},
{id:'123',时间:'10:20'},
{id:'125',时间:'12:00'},
{id:'124',时间:'11:30'}
]
常量notUndefined=元素=>!!元素
const res=地址
.map(地址=>{
const pickup=pickups.find(pickup=>pickup.id==address.id)
if(皮卡){
返回{…地址,…收件}
}
})
.过滤器(未定义)
console.log(res)
地址=[
{id:“123”,名称:“任何城市街道”},
{id:“124”,名称:“任何城市街道”},
{id:“125”,名称:“任何城市街道”},
{id:“126”,名称:“任何城市街道”}
];
皮卡=[
{id:“123”,时间:“10:20”},
{id:“124”,时间:“11:30”},
{id:“125”,时间:“12:00”},
{id:“126”,时间:“12:20”}
];
const mergedArr=address.map((项目,i)=>{
if(item.id==pickups[i].id){
返回Object.assign({},item,pickups[i]);
}
});
console.log(mergedArr);
使用Map

address=[{id:“123”,name:“any city street”},{id:“124”,name:“any city street”},{id:“125”,name:“any city street”},{id:“126”,name:“any city street”};
皮卡车=[{id:“123”,时间:“10:20”},{id:“124”,时间:“11:30”},{id:“125”,时间:“12:00”},{id:“126”,时间:“12:20”}];
map=newmap()
address.map(o=>map.set(o.id,o))
var res=pickups.map(o=>{
var v=映射获取(o.id);
如果(v)v.time=o.time
返回v})
console.log(res)
使用Reduce:

const地址=[
{id:“123”,名称:“任何城市街道”},
{id:“124”,名称:“任何城市街道”},
{id:“125”,名称:“任何城市街道”},
{id:“126”,名称:“任何城市街道”}
];
常量拾取=[
{id:“123”,时间:“10:20”},
{id:“124”,时间:“11:30”},
{id:“125”,时间:“12:00”},
{id:“126”,时间:“12:20”}
];
常量结果数组=[];
address.reduce((resultar,currentAddress)=>{
让currentAddressPickup=pickups.find(pickup=>pickup.id==currentAddress.id);
让MergedCurrentAddressAndPick={
…当前地址,
…当前地址拾取
}
结果推送(合并当前地址和拾取)
返回结果器;
},resultArray)

console.log(resultArray)
如果两个数组的顺序不同,则此操作将失败。我的意思是此代码与id不匹配,只是按索引映射元素。我需要将两个对象与相同的idI连接。我创建了如下内容:但我不知道这是否正确。我认为您应该更正预期结果,例如:{id:“124”,名称:“any city street”,时间:“11:30”}Thanx,更正:由于IDS在if条件下检查id后合并了两个数组,因此此操作将不起作用。