js 数组问题

小鱼n_n 2018-03-12 03:38:45

有这样两个数组:

var days = array('2018-02-02','2018-02-09','2018-02-16','2018-02-23');

var array = array({'a':1,'b':2,'c':'2018-02-01'},{'a':2,'b':22,'c':'2018-02-06'},{'a':2,'b':22,'c':'2018-02-07'},{'a':11,'b':21,'c':'2018-02-11'},{'a':13,'b':25,'c':'2018-02-15'},{'a':1,'b':2,'c':'2018-02-17'},{'a':1,'b':2,'c':'2018-02-24'});


想根据第一个数组的日期范围,对第二个数组进行日期对比,最后形成这样一个数组:

var newarray = ['2018-02-02':[{'a':1,'b':2,'c':'2018-02-01'}],'2018-02-09':[{'a':2,'b':22,'c':'2018-02-06'},{'a':2,'b':22,'c':'2018-02-07'}],'2018-02-16':[{'a':11,'b':21,'c':'2018-02-11'}],'2018-02-23':[{'a':1,'b':2,'c':'2018-02-17'},{'a':1,'b':2,'c':'2018-02-24'}]];


求高手!
求大神!
...全文
261 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
小鱼n_n 2018-03-12
  • 打赏
  • 举报
回复
引用 7 楼 qq_35470953 的回复:
所以说之前几位给的答案其实都不全面
嗯,谢谢啦!我已经结贴了!实际上我的需求很麻烦,上面两位的答案算是能帮我到了。
无聊的上午 2018-03-12
  • 打赏
  • 举报
回复
所以说之前几位给的答案其实都不全面
无聊的上午 2018-03-12
  • 打赏
  • 举报
回复
var newarray = ['2018-02-02':[{'a':1,'b':2,'c':'2018-02-01'}],'2018-02-09':[{'a':2,'b':22,'c':'2018-02-06'},{'a':2,'b':22,'c':'2018-02-07'}],'2018-02-16':[{'a':11,'b':21,'c':'2018-02-11'}],'2018-02-23':[{'a':1,'b':2,'c':'2018-02-17'},{'a':1,'b':2,'c':'2018-02-24'}]]; 你的格式都不对 同学,js []是数组,数组的格式是[a,b,c...] 而你写的[a:[a,b,c]] 这个不是数组哈 正确的写法是 {a:[a,b,c]},然后根据你的需求实际上是想将接近的两个日期组成一组key:value的键值对,那么你除了要像之前 天际的海浪 那种写法一样外还需要判断一下日期的区间。 举个例子:按照 天际的海浪 的写法有个BUG,2018-02-09也比2018-02-01大,所以这边出现的key值不止一个,实际上你要的相邻的两组做比较 days[i]和array[j].c分别截取最后两位,即日期,假如第一次i=1 days[i]获取到的数字是02 然后依次减去array[j].c获取到值,相差最近就是你的key和value值
小鱼n_n 2018-03-12
  • 打赏
  • 举报
回复
引用 3 楼 jslang 的回复:
{'a':1,'b':2,'c':'2018-02-24'}也是要放入2018-02-23中吗?

var days = new Array('2018-02-02','2018-02-09','2018-02-16','2018-02-23');

var array = new Array({'a':1,'b':2,'c':'2018-02-01'},{'a':2,'b':22,'c':'2018-02-06'},{'a':2,'b':22,'c':'2018-02-07'},{'a':11,'b':21,'c':'2018-02-11'},{'a':13,'b':25,'c':'2018-02-15'},{'a':1,'b':2,'c':'2018-02-17'},{'a':1,'b':2,'c':'2018-02-24'});

var newarray = {};
for (var i = 0; i < days.length; i++) {
	var qa = newarray[days[i]] = [];
	for (var j = 0; j < array.length; j++) {
		if (array[j].c<days[i]) {
			qa.push(array[j]);
			array.splice(j--,1);
		}
	}
}
qa.push.apply(qa,array);
alert(JSON.stringify(newarray,null,4));

是,因为这是一个范围的东西,我实际情况就是最后可能还有几个值,需要放到最后一个数组里
天际的海浪 2018-03-12
  • 打赏
  • 举报
回复
{'a':1,'b':2,'c':'2018-02-24'}也是要放入2018-02-23中吗?

var days = new Array('2018-02-02','2018-02-09','2018-02-16','2018-02-23');

var array = new Array({'a':1,'b':2,'c':'2018-02-01'},{'a':2,'b':22,'c':'2018-02-06'},{'a':2,'b':22,'c':'2018-02-07'},{'a':11,'b':21,'c':'2018-02-11'},{'a':13,'b':25,'c':'2018-02-15'},{'a':1,'b':2,'c':'2018-02-17'},{'a':1,'b':2,'c':'2018-02-24'});

var newarray = {};
for (var i = 0; i < days.length; i++) {
	var qa = newarray[days[i]] = [];
	for (var j = 0; j < array.length; j++) {
		if (array[j].c<days[i]) {
			qa.push(array[j]);
			array.splice(j--,1);
		}
	}
}
qa.push.apply(qa,array);
alert(JSON.stringify(newarray,null,4));

小鱼n_n 2018-03-12
  • 打赏
  • 举报
回复
引用 2 楼 zzgzzg00 的回复:

var days = ['2018-02-02','2018-02-09','2018-02-16','2018-02-23'];

    var array = [
        {'a':1,'b':2,'c':'2018-02-01'},
        {'a':2,'b':22,'c':'2018-02-06'},
        {'a':2,'b':22,'c':'2018-02-07'},
        {'a':11,'b':21,'c':'2018-02-11'},
        {'a':13,'b':25,'c':'2018-02-15'},
        {'a':1,'b':2,'c':'2018-02-17'},
        {'a':1,'b':2,'c':'2018-02-24'}
        ];
    var tt=days.map(function(item,index,arr){
        var arrys=array.filter(function(obj){
            return obj.c<=item && (index-1>=0?obj.c>arr[index-1]?true:false:true);
        });
        var o={};
        o[item]=arrys;
        return o;
    })
    console.log(tt);
非常感谢! 还有一个问题:第二个数组的最后一个日期[2018-02-24],怎么放到新数组的最后一个元素里?
似梦飞花 2018-03-12
  • 打赏
  • 举报
回复

var days = ['2018-02-02','2018-02-09','2018-02-16','2018-02-23'];

    var array = [
        {'a':1,'b':2,'c':'2018-02-01'},
        {'a':2,'b':22,'c':'2018-02-06'},
        {'a':2,'b':22,'c':'2018-02-07'},
        {'a':11,'b':21,'c':'2018-02-11'},
        {'a':13,'b':25,'c':'2018-02-15'},
        {'a':1,'b':2,'c':'2018-02-17'},
        {'a':1,'b':2,'c':'2018-02-24'}
        ];
    var tt=days.map(function(item,index,arr){
        var arrys=array.filter(function(obj){
            return obj.c<=item && (index-1>=0?obj.c>arr[index-1]?true:false:true);
        });
        var o={};
        o[item]=arrys;
        return o;
    })
    console.log(tt);
小鱼n_n 2018-03-12
  • 打赏
  • 举报
回复
大神在哪里?出来帮帮忙!

87,915

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧