带有下划线js的数组中对象值的小写

时间:2013-03-19 21:24:21

标签: javascript underscore.js

假设我在数据变量中有这个JSON数据

[{"id":"1","module_id":"1","title":"Test",
  "start_date":"2012-11-12" "end_date":"2012-11-18"},
 {"id":"8","module_id":"1","title":"This is OK",
  "start_date":"2013-01-14","end_date":"2013-01-31"}]

如何使用underscore.js获得以下结果?

[{"id":"1","module_id":"1","title":"test",
  "start_date":"2012-11-12","end_date":"2012-11-18"},
 {"id":"8","module_id":"1","title":"this is ok",
  "start_date":"2013-01-14","end_date":"2013-01-31"}]

我可以通过调用来执行此操作吗?

4 个答案:

答案 0 :(得分:5)

您可以使用Lo Dash's _.mapValues function轻松完成此操作:

_.mapValues(objs, function(s){
  return _.isString(s) ? s.toLowerCase() : s;
});

答案 1 :(得分:1)

如果您已经在处理对象(或解析的JSON),您可以循环并创建一个新对象:

var objs = [{"id":"1","module_id":"1","title":"Test", "start_date":"2012-11-12", "end_date":"2012-11-18"},{"id":"8","module_id":"1","title":"This is OK", "start_date":"2013-01-14","end_date":"2013-01-31"}];

var out = [];
for(var i=0; i<objs.length; i++) {
    var outObj = {}
    for(var prop in objs[i]) {
        var val = objs[i][prop];
        if(prop === 'title') {
            val = val.toLowerCase();  
        }
        outObj[prop] = val;
    }
    out.push(outObj);
}
console.log(out);

http://jsfiddle.net/uY36J/

答案 2 :(得分:1)

如果您有array个对象:

for(var i = 0; i < array.length; i++) {
   for (var prop in array[i])
       // condition here
       array[i][prop] = array[i][prop].toLowerCase();
}

console.log(array)

与下划线相同(我不认为它更短 - 你仍然需要两个循环。更可读 - 可能,但不能更短)

_.each(array, function(obj) {
    _.each(obj, function(value, key) { 
        // condition here        
        obj[key] = value.toLowerCase();
    });
});

答案 3 :(得分:0)

您可以将对象分成两个数组,一个使用键,另一个使用值,然后使用_.map来小写字符串。

var objs = [{"id":"1","module_id":"1","title":"Test", "start_date":"2012-11-12", "end_date":"2012-11-18"},{"id":"8","module_id":"1","title":"This is OK", "start_date":"2013-01-14","end_date":"2013-01-31"}];

 _.map(objs,function(element) {
     return  _.object(_.keys(element), _.values(element).map(function(value) { 
         return _.isString(value)? value.toLowerCase():value; 
     }));
 });

你知道,我正在检查它是否是我们正在处理的字符串,以避免在其他类型上调用toLowerCase。

降低键和值的缩小也是微不足道的

 _.map(objs,function(element) {
     return  _.object(
         _.keys(element).map(function(key) { 
             return _.isString(key)? key.toLowerCase():key; 
         }),
         _.values(element).map(function(value) { 
             return _.isString(value)? value.toLowerCase():value; 
         })
     );
 });

警告:这不会对嵌套对象进行操作。 ¯| (ツ)