Javascript 比较两个数组并填充缺少的值
我想比较两个数组中的日期,并将匹配日期中的名称推送到一个新数组中。然后按“0”查找缺少的日期 这就是我尝试过的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
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;i console.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