为了账号安全,请及时绑定邮箱和手机立即绑定

js 数组合并问题

js 数组合并问题

慕娘9325324 2019-02-05 20:19:41
业务描述,在日历上显示一个月跑步的日期日历这快完全是用前端js实现的,所以只需要后台给一个跑步日期的数组插进日历的数组里就行了,我的思路是做两层循环,但是这样计算量很大,有没有更好的方法?后台返回一个月中跑步的日期[1,4,6,8,21]前端某月 日历数组[{day:1},{day:2}......{day:31}]希望合并的最后的结果是[{day:1,isrun:false},{day:2,isrun:false}...{day:4,isrun:true}...{day:6,isrun:true}....{day:31,isrun:false}]
查看完整描述

2 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

首先,反对推荐答案,indexOf只是语法糖,内部还是循环


如果这样做,我想了很久,没有想到什么好办法,

但是上面的答案也绝对不对,你想下map、indexOf、include这些方法内部原理是不是还是循环?

只是被封装的很好,使你的代码看起来很优雅。


那么,我们换个思路


let days = [2, 4, 5, 7];

let run = [{ day: 1 }, { day: 2 }......{ day: 31 }];

for(let i=0;i<days.length;i++){

  run[days[i]-1].isrun=true;

}

run数组里的下标是可以利用起来的,实际天数-1就是下标


写之前没注意看 我赞同 @yszou 的答案,只有这样才能实现单层循环,其他的全是语法糖包装,实质运算量并没有减少


查看完整回答
反对 回复 2019-02-28
?
PIPIONE

TA贡献1829条经验 获得超9个赞

var a = [1,4,6,8,21];

var b = [{day:1},{day:2}......{day:31}];

确保 b 是事个“完整”的列表,这个前提下, a 的成员的值,就是 b 的成员的索引值。


即:


$.map(a, function(v){ b[v-1].isrun = true });


查看完整回答
反对 回复 2019-02-28
  • 2 回答
  • 0 关注
  • 479 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信