[{date:'2017-8-1'},{date:'2017-8-2'},{date:'2017-8-3'},{date:'2017-8-5'},{date:'2017-8-6'},{date:'2017-8-7'},{date:'2017-8-8'},{date:'2017-8-9'}]
我有上面的数据,我尝试将最后两个项目分组并给它一个属性'周末',其余的是工作日',我的预期输出是这样的
{
weekdays: [{date:'2017-8-1'},{date:'2017-8-2'},{date:'2017-8-3'},{date:'2017-8-5'},{date:'2017-8-6'},{date:'2017-8-7'}],
weekends: [{date:'2017-8-8'},{date:'2017-8-9'}]
}
我尝试失败
data.map((obj, i) => {
if(data.length - (i + 1) >= 2) {
return {
weekdays: {
date: moment(obj.date)
}
}
}
return {
weekends: {
date: moment(obj.date)
}
}
})
答案 0 :(得分:1)
如果您确定周末天总是输入数组中的最后两个元素,则可以使用简单的slice
。
var inputArray = [{date:'2017-8-1'},{date:'2017-8-2'},{date:'2017-8-3'},{date:'2017-8-5'},{date:'2017-8-6'},{date:'2017-8-7'},{date:'2017-8-8'},{date:'2017-8-9'}],
outputArray = {
weekdays: inputArray.slice(0,5),
weekends: inputArray.slice(6)
};
console.log(outputArray);
答案 1 :(得分:1)
如果您不确定这些日期的订单:
<button onclick="send('ON');">On</button>
答案 2 :(得分:0)
您可以将字符串转换为日期,然后使用.getDay()
方法检查它是哪一天。然后将它放入相应的数组中:
var array = [{date:'2017-8-1'},{date:'2017-8-2'},{date:'2017-8-3'},{date:'2017-8-5'},{date:'2017-8-6'},{date:'2017-8-7'},{date:'2017-8-8'},{date:'2017-8-9'}];
var obj = {
weekdays: [],
weekends: []
};
array.forEach((el, key) => {
if(new Date(el.date).getDay() === 0 || new Date(el.date).getDay() === 6) obj.weekends.push(el); else obj.weekdays.push(el);
});
console.log(obj);
&#13;
答案 3 :(得分:0)
您既不返回变量也不返回数组。 尝试使用foreach并将属性添加到变量中。
而不是您当前的解决方案,试试这个;
$(document).ready(function () {
function close_content() {
alert('closed now');
$("#content").hide();
}
$(document).keyup(function(event) {
if (event.which == 27) {
close_content();
}
}
$("#close_content").click(close_content);
});
答案 4 :(得分:0)
添加其他答案并解释您尝试失败的原因:Array.map
而不是reduce
。后者旨在为输入数组中的每个元素返回一个元素,而const outObj = inArr.reduce(function(obj, current, i) {
if(i >= 5) { // or other check for weekend, depending on your data
return Object.assign(obj, { weekends : obj.weekends.push(current) })
} else {
return Object.assign(obj, { weekdays : obj.weekdays.push(current) })
}
}, { weekdays : [], weekends : [] })
可用于将数组“折叠”为单个值,对象或其他内容(这是我们想要的)。
优雅的解决方案可能如下所示:
map
在上面的代码片段中,我们传入的函数在每个输入元素上运行,就像obj
一样。关键的区别在于它可以访问由函数的最后一次运行产生的输出,该输出作为第一个参数传递(在本例中称为reduce
)。顺便说一下,传递给obj
的第二个参数是map
的初始状态(一个有两个空列表的对象)。
这种方法可以逐步填充单个对象,而不是创建 n 不同的对象,例如typedef T<U> base_t;
版本。
答案 5 :(得分:0)
由于您已经使用momenjs,因此您可以使用map()
将数组转换为moment
个对象的数组,然后使用filter
转换为isoWeekday()
method:
var array = [{date:'2017-8-1'},{date:'2017-8-2'},{date:'2017-8-3'},{date:'2017-8-5'},{date:'2017-8-6'},{date:'2017-8-7'},{date:'2017-8-8'},{date:'2017-8-9'}];
var momentArray = array.map(function(d){ return moment(d.date, "YYYY-M-D"); });
var obj = {
weekdays: momentArray.filter(function(d){ return d.isoWeekday() < 6 }),
weekends: momentArray.filter(function(d){ return d.isoWeekday() > 5 })
};
console.log(obj);
&#13;
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
&#13;