假设我有一个用户可以选择的日期列表(他们可以选择多个)。
周日,周一,周二,周三,周四,周五,周六。每个都有一个与之相关的数字(0-6)。 0表示星期日,6表示星期六:
vm.weekDays = [
{name: 'Sunday', number: 0},
{name: 'Monday', number: 1},
{name: 'Tuesday', number: 2},
{name: 'Wednesday', number: 3},
{name: 'Thursday', number: 4},
{name: 'Friday', number: 5},
{name: 'Saturday', number: 6},
]
假设用户选择星期日,星期一,星期二,我们应该得到字符串"星期日 - 星期二"。但是,如果用户选择星期日,星期一,星期二,星期四,我们应该得到字符串"星期日 - 星期二,星期四和#34;。如果用户选择星期日,星期二,星期四,那么他们应该看到这一点。
目前,我将字符串存储在一个数组中。然后,我将使用它来显示字符串。
这是我到目前为止所拥有的:
function test() {
vm.display = [];
var test = _.sortBy(vm.sWeekDays, 'number');
var start = 0;
var end = 0;
if(test.length > 1){
for(var i=0; i <= test.length-2; i++){
if(test[i].number+1 != test[i+1].number) {
start = i + 1;
end = i;
vm.display.push(test[i].name);
}
end = i+1;
}
vm.display.push(test[start].name + " - " + test[end].name);
} else {
vm.display.push(test[0].name);
}
}
目前,我连续几天出现,但如果我从周日到周二和周四选择它没有正确显示。
非常感谢任何帮助。
答案 0 :(得分:0)
我编辑了你的代码,但我希望答案很明确。这是我的实施
var vm = {};
vm.weekDays = [{
name: 'Sunday',
number: 0
}, {
name: 'Monday',
number: 1
}, {
name: 'Tuesday',
number: 2
}, {
name: 'Wednesday',
number: 3
}, {
name: 'Thursday',
number: 4
}, {
name: 'Friday',
number: 5
}, {
name: 'Saturday',
number: 6
}, ]
function formatSelected(selected) {
vm.display = [];
selected = _.sortBy(selected, 'number'); //this could be vm.selected instead of passing it as a parameter
var lastnumber = 0,
template = {
name: '',
number: 0
},
last,
list = [];
if (selected.length > 0) {
last = selected[0];
for (var i = 0; i < selected.length; i++) {
if (last) {
var left = selected[i - 1] ? selected[i - 1] : angular.copy(template);
console.log(selected[i].number - left.number)
if (i > 0 && selected[i].number - left.number > 1) {
list.push(((left.name != last.name) ? (last.name + '-') : '') + left.name);
last = selected[i];
}
if((i == (selected.length - 1))) {
list.push(((selected[i].name != last.name) ? (last.name + '-') : '') + selected[i].name);
}
} else {
last = selected[i];
}
}
}
vm.display = list;
};
然后你可以使用数组
调用该函数 formatSelected([{
name: 'Sunday',
number: 0
}, {
name: 'Monday',
number: 1
}, {
name: 'Tuesday',
number: 2
}, {
name: 'Wednesday',
number: 3
}, {
name: 'Saturday',
number: 6
}, ]);
我编辑了处理数组的解决方案,例如:
formatSelected([{ name: 'Sunday', number: 0}, { name: 'Tuesday', number: 2}, { name: 'Thursday', number: 4}]);
答案 1 :(得分:0)
我们可以有一个地图来存储范围,然后我们将地图缩减为结果字符串。
// The map structure
[
[{
name: 'Sun',
number: 0
}, {
name: 'Mon',
number: 1
}, {
name: 'Tue',
number: 2
}],
[{
name: 'Thu',
number: 4
}]
]
在此之后,我们会检查每个范围是否需要转换为'day1 - day3'
或'day1, day2'
。
请检查此JSFiddle