Javascript 阵列修改

Javascript 阵列修改,javascript,arrays,Javascript,Arrays,我有两个数组 arrNew = [ { RecordId: '181049' }, { RecordId: '187020'}, { RecordId: '187022'} ] arrOld = [ { RecordId: '181049', DateCreated: 1563447093134 }, { RecordId: '187020', DateCreated: 1563447093134 }, { RecordId: '187021',

我有两个数组

arrNew = [
    { RecordId: '181049' },
    { RecordId: '187020'},
    { RecordId: '187022'}
]

arrOld = [
    { RecordId: '181049', DateCreated: 1563447093134 },
    { RecordId: '187020', DateCreated: 1563447093134 },
    { RecordId: '187021', DateCreated: 1563447093134 }
]
我需要做的是从
arrNew
获取
RecordId
,并检查
arrOld
中是否存在该记录。如果是,则将与该
RecordId
关联的
DateCreated
复制到
arrNew
,但如果记录是新的(仅存在于
newArr
中),则添加一个与今天日期相等的
DateCreate

预期结果:

arrNew = [
    { RecordId: '181049', DateCreated: 1563447093134 },
    { RecordId: '187020', DateCreated: 1563447093134},
    { RecordId: '187022', DateCreated: today's date}
]
我试图调整下一个代码,但不知道如何开始

let known = new Set(arrOld.map(res => res.RecordId));
let unknown = arrNew.filter(res => known.has(res.RecordId));
您可以使用
reduce()
从对象数组创建对象。然后通过
arrNew
循环并更改其道具

const arrNew=[{RecordId:'181049'},
{RecordId:'187020'},
{RecordId:'187022'}]
const arrOld=[{RecordId:'181049',创建日期:1563447093134},
{RecordId:'187020',创建日期:1563447093134},
{记录ID:'187021',创建日期:1563447093134}]
设obj=arrOld.reduce((ac,a)=>(ac[a.RecordId]=a,ac),{});
arrNew.forEach(x=>{
if(obj[x.RecordId]){
x、 DateCreated=obj[x.RecordId].DateCreated;
}
否则{
x、 DateCreated=(新日期()).getTime()
}
})

console.log(arrNew)
您可以使用单个映射-不需要多个循环。只需检查它是否存在,如果存在,则返回带有DateCreated属性的对象:

const arrNew=[{
记录ID:'181049'
},
{
RecordId:'187020'
},
{
记录ID:'187022'
}
]
警察阿罗尔德=[{
记录ID:'181049',
创建日期:1563447093134
},
{
记录ID:'187020',
创建日期:1563447093134
},
{
记录ID:'187021',
创建日期:1563447093134
}
]
const out=arrNew.map(o=>{
常量f=arrOld.find(e=>e.RecordId==o.RecordId)
返回f
?{DateCreated:f.DateCreated,…o}
:{DateCreated:new Date().getTime(),…o}
})

console.log(out)
一种解决方案是首先从
arrOld
数组创建一组较旧的寄存器。然后,在第二步中,您可以在
arrNew
数组上使用,将每个寄存器映射到具有
dateCreated
属性的新对象

let arrNew=[
{RecordId:'181049'},
{RecordId:'187020'},
{RecordId:'187022'}
]
设arrOld=[
{RecordId:'181049',创建日期:1563447093134},
{RecordId:'187020',创建日期:1563447093134},
{RecordId:'187021',创建日期:1563447093134}
]
让人知道=新地图(
arrOld.map({RecordId,DateCreated})=>[RecordId,DateCreated])
);
arrNew=arrNew.map(
({RecordId})=>({RecordId,DateCreated:known.get(RecordId)| |+new Date()})
);
console.log(arrNew)
.as控制台{背景色:黑色!重要;颜色:石灰;}

.作为控制台包装{max height:100%!important;top:0;}
您正在使用多个循环。只是它们是隐式的(
map
arrOld.find(…)
)。