Javascript 比较两个数组并填充缺少的值

Javascript 比较两个数组并填充缺少的值,javascript,arrays,for-loop,Javascript,Arrays,For Loop,我想比较两个数组中的日期,并将匹配日期中的名称推送到一个新数组中。然后按“0”查找缺少的日期 这就是我尝试过的 var数据=[{ 姓名:“艾米”, 日期:2020-01-01 }, { 姓名:'约翰', 日期:2020-01-02 }, { 名字:“莎拉”, 日期:2020-01-04 }]; var fulldate=['2020-01-01'、'2020-01-02'、'2020-01-03'、'2020-01-04'、'2020-01-05']; var newData=[]; var

我想比较两个数组中的日期,并将匹配日期中的名称推送到一个新数组中。然后按“0”查找缺少的日期

这就是我尝试过的

var数据=[{
姓名:“艾米”,
日期:2020-01-01
}, {
姓名:'约翰',
日期:2020-01-02
}, {
名字:“莎拉”,
日期:2020-01-04
}];
var fulldate=['2020-01-01'、'2020-01-02'、'2020-01-03'、'2020-01-04'、'2020-01-05'];
var newData=[];
var len=data.length;
对于(变量i=0;i
  • 在您的代码中,您使用了基于
    数据
    可变长度的
    for循环
    ,但结果的长度与
    fulldate
    相同,因此它将基于
    fulldate
    可变长度进行循环
  • 在循环内部,您已经比较了
    fulldate[i]==data[i].date
    ,所以只比较了相同的索引。在循环中,您需要使用另一个循环来查找匹配日期的索引
您可以简单地使用
Array.prototype.map
函数,而不是使用
for
循环。(在map函数中,使用
Array.prototype.findIndex
,可以找到匹配的日期索引。)

var数据=[{
姓名:“艾米”,
日期:2020-01-01
}, {
姓名:'约翰',
日期:2020-01-02
}, {
名字:“莎拉”,
日期:2020-01-04
}];
var fulldate=['2020-01-01'、'2020-01-02'、'2020-01-03'、'2020-01-04'、'2020-01-05'];
const result=fulldate.map((日期)=>{
const existed=data.findIndex(item=>item.date==date);
返回已存在>=0?数据[已存在]。名称:0
});
控制台日志(结果)
  • 在您的代码中,您使用了基于
    数据
    可变长度的
    for循环
    ,但结果的长度与
    fulldate
    相同,因此它将基于
    fulldate
    可变长度进行循环
  • 在循环内部,您已经比较了
    fulldate[i]==data[i].date
    ,所以只比较了相同的索引。在循环中,您需要使用另一个循环来查找匹配日期的索引
您可以简单地使用
Array.prototype.map
函数,而不是使用
for
循环。(在map函数中,使用
Array.prototype.findIndex
,可以找到匹配的日期索引。)

var数据=[{
姓名:“艾米”,
日期:2020-01-01
}, {
姓名:'约翰',
日期:2020-01-02
}, {
名字:“莎拉”,
日期:2020-01-04
}];
var fulldate=['2020-01-01'、'2020-01-02'、'2020-01-03'、'2020-01-04'、'2020-01-05'];
const result=fulldate.map((日期)=>{
const existed=data.findIndex(item=>item.date==date);
返回已存在>=0?数据[已存在]。名称:0
});
控制台日志(结果)
var数据=[{
姓名:“艾米”,
日期:2020-01-01
}, {
姓名:'约翰',
日期:2020-01-02
}, {
名字:“莎拉”,
日期:2020-01-04
}];
var fulldate=[
'2020-01-01',
'2020-01-02',
'2020-01-03',
'2020-01-04',
'2020-01-05'
];
var newData=[];
对于(变量i=0;i
var数据=[{
姓名:“艾米”,
日期:2020-01-01
}, {
姓名:'约翰',
日期:2020-01-02
}, {
名字:“莎拉”,
日期:2020-01-04
}];
var fulldate=[
'2020-01-01',
'2020-01-02',
'2020-01-03',
'2020-01-04',
'2020-01-05'
];
var newData=[];
对于(变量i=0;iconsole.log(newData)最好的方法总是使用
map
filter
。在
fulldate
上使用map函数,该
obj
过滤出与当前
el
值日期相同的对象(如果存在)。我在return语句中使用了三元运算符,如果对象存在,则返回name,否则返回0

var数据=[{
姓名:“艾米”,
日期:2020-01-01
}, {
姓名:'约翰',
日期:2020-01-02
}, {
名字:“莎拉”,
日期:2020-01-04
}];
var fulldate=['2020-01-01'、'2020-01-02'、'2020-01-03'、'2020-01-04'、'2020-01-05'];
var result=fulldate.map((el)=>{
设obj=data.filter(item=>(item.date==el))
返回(obj[0])?obj[0]。名称:0;
})

控制台日志(结果)最好的方法总是使用
map
filter
。在
fulldate
上使用map函数,该
obj
过滤出与当前
el
值日期相同的对象(如果存在)。我在return语句中使用了三元运算符,如果对象存在,则返回name,否则返回0

var数据=[{
姓名:“艾米”,
日期:2020-01-01
}, {
姓名:'约翰',
日期:2020-01-02
}, {
名字:“莎拉”,
日期:2020-01-04
}];
var fulldate=['2020-01-01'、'2020-01-02'、'2020-01-03'、'2020-01-04'、'2020-01-05'];
var result=fulldate.map((el)=>{
设obj=data.filter(item=>(item.date==el))
返回(obj[0])?obj[0]。名称:0;
})

控制台日志(结果)
假设数组已按日期排序,请使用变量
dataIdx
迭代
数据
,并使用
Array.map()
简化for循环

var data=[{姓名:'Amy',日期:'2020-01-01'},{姓名:'John',日期:'2020-01-02'},{姓名:'Sara',日期:'2020-01-04'}];
var fulldate=['2020-01-01'、'2020-01-02'、'2020-01-03'、'2020-01-04'、'2020-01-05'];
var-dataIdx=0;
var newData=fulldate.map(date=>data[dataIdx]&&data[dataIdx].date==date?data[dataIdx++]。名称:“0”);

console.log(newData)假设数组已按日期排序,u