1

データ変数にこの 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"}]

これを invoke で行うことはできますか?

4

4 に答える 4

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)

アンダースコアと同じです (それほど短いとは思いません。ここでも 2 つのループが必要です。より読みやすい - たぶん、しかし短くはありません)

_.each(array, function(obj) {
    _.each(obj, function(value, key) { 
        // condition here        
        obj[key] = value.toLowerCase();
    });
});
于 2013-03-19T22:41:15.397 に答える
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/

于 2013-03-19T22:31:05.283 に答える
0

オブジェクトを 2 つの配列 (1 つはキー、もう 1 つは値) に分けてから、_.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; 
         })
     );
 });

警告: これは、ネストされたオブジェクトでは機能しません。¯\_(ツ)_/¯

于 2014-12-02T15:39:30.743 に答える