如何在javascript中将选定的星期转换为分隔的整数

时间:2014-11-27 04:27:52

标签: javascript angularjs

我有工作日的复选框,用户可以选择

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);
            });

4 个答案:

答案 0 :(得分:1)

您可以执行此操作,使用查找表将星期几转换为日期数字,在数组中累积所选数字,然后将数组转换为逗号分隔字符串。

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);

答案 1 :(得分:0)



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(','));
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="out">please wait ...</div>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

一种不同的方法,如果某些对象的属性缺失或无序,该方法应该有效:

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 3 :(得分:0)

问题是你在隐含地假设你的对象属性顺序在迭代时保持相同,因此你可以轻松地将你的属性名称映射到索引。例如“mon”映射到0.但这不是一个保证的跨浏览器场景。

  

for..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