如何将选定的星期几转换为 javascript 中的分隔整数
How can i convert days of week selected into , separated integers in javascript
我有工作日的复选框,用户选择它们
JS对象是这样的
{"mon":true,"tue":true,"wed":true,"thu":false,"fri":false,"sat":false,"sun":false}
现在我想将其转换为字符串,分隔值,例如。
0,1,2
存储在星期一为 0 的数据库中,依此类推。 因此,如果只选择星期日,那么它将是
仅7
我试过这个
var b = days;
days = days.map(function (a) {
return b.indexOf(a);
});
您可以执行此操作,它使用查找表将星期几转换为日数字,将所选数字累积到数组中,然后将数组转换为逗号分隔的字符串。
function getDayList(data) {
var dayNumMap = {"mon":1,"tue":2,"wed":3,"thu":4,"fri":5,"sat":6,"sun":7};
var list = [], item;
// iterate all days pass in
for (var day in data) {
// if the checkbox was selected
if (data[day]) {
item = dayNumMap[day];
// if it's valid data
if (item) {
// add the day number to the list
list.push(item);
}
}
}
// return a comma separated string
return list.sort().join(",");
}
// data from checkboxes
var formData = {"mon":true,"tue":true,"wed":true,"thu":false,"fri":false,"sat":false,"sun":false};
var str = getDayList(formData);
var json = {
"mon": true,
"tue": true,
"wed": true,
"thu": false,
"fri": false,
"sat": true,
"sun": false
};
var sel = [], i = 0;
$.each(json, function(a, b) {
if (b)
sel.push(i);//<-- selected index
i++;
});
$('#out').text('selected: ' + sel.join(','));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="out">please wait ...</div>
一种不同的方法,如果对象的某些属性丢失或顺序错误,该方法应该有效:
var obj = {"mon":true,"tue":true,"wed":true,"thu":false,"fri":false,"sat":false,"sun":false}
var s= '';
for(var i in obj) {
if(obj[i]) {
s+= 'montuewedthufrisatsun'.indexOf(i)/3;
}
}
s= s.split('').sort().join(',')
alert(s);
问题是你隐含地假设你的对象属性顺序在迭代时将保持不变,因此你可以轻松地将你的属性名称映射到索引。 例如,"mon"映射到 0。但这不是保证的跨浏览器方案。
为..in 语句循环访问 对象,以任意顺序排列。
因此,要获得更健壮和可预测的方法,您应该将映射值添加到对象本身
var days = {"mon":{index:0,value:true},"tue":{index:1,value:true}};
var val = getConcatanatedDays(days);
function getConcatanatedDays(obj) {
var val = [];
for(var prop in obj) {
if(obj.hasOwnProperty(prop) && obj[prop].value) {
val.push(obj[prop].index);
}
}
return val.join(',');
}
您还可以考虑将日期存储在数组中,这样您就不必单独存储日期值,并且您将获得循环数组的灵活性。
var days = [{"mon":true},{}];//ordered iteration
相关文章:
- 使用键/代码转换JavaScript数组
- NS_ERROR_XPC_BAD_CONVERT_JS:无法转换JavaScript参数arg 0[nsIDOMWind
- 转换Javascript中的DayOfYear值以用于Flot
- 转换Javascript日期格式
- 字符串大小写转换 javascript
- 一个很好的文本到语音转换JavaScript库
- JQuery 函数突然停止工作,转换 Javascript 参数时出错
- 转换 JavaScript 代码
- 需要转换Javascript数组的格式
- 转换javascript中的日期格式
- 循环以转换JavaScript对象
- jQuery Post中的错误:无法转换JavaScript参数
- UglifyJS转换javascript代码
- Html到Haml的转换javascript
- 正在转换Javascript日期
- 转换Javascript关联对象并用PHP输出
- 转换JavaScript'这'到jQuery'$(这个)'
- 转换JavaScript数组
- 无法转换JavaScript参数arg 0 [nsIDOMWindow.getComputedStyle]
- jQuery美元.Firefox中的ajax错误:"无法转换JavaScript参数"