2016-03-21 3 views
1

Я хочу заменить значения selectedCIID своей переменной. Я могу сделать itreting используя JS для цикла.lodash найти значение ключа и заменить его переменной из JSON

Но я хочу использовать lodash для эффективного результата.

JSON:

{ 
    "rows": [{ 
     "title": " row 1", 
     "panels": [{ 
      "targets": [{ 
       "selectedCIID": "5856742957ce424b8db6cfb309b6b013", 
       "series": "" 
      }] 
     }] 
    }, { 
     "title": "row 2", 
     "panels": [{ 
      "targets": [{ 
       "selectedCIID": "5856742957ce424b8db6cfb309b6b013", 
       "series": "" 
      }] 
     }, { 
      "targets": [{ 
       "selectedCIID": "5856742957ce424b8db6cfb309b6b013", 
       "series": "" 
      }] 
     }] 
    }] 
} 

Пожалуйста, помогите.

+0

является «целями» всегда массивом одного элемента? – isvforall

ответ

0

Вы можете решить вашу проблему эффективно без lodash, используя обычный JavaScript:

var json = { "rows": [{ "title": " row 1", "panels": [{ "targets": [{ "selectedCIID": "5856742957ce424b8db6cfb309b6b013", "series": "" }] }] }, { "title": "row 2", "panels": [{ "targets": [{ "selectedCIID": "5856742957ce424b8db6cfb309b6b013", "series": "" }] }, { "targets": [{ "selectedCIID": "5856742957ce424b8db6cfb309b6b013", "series": "" }] }] }] }; 
 
var newValue = "55555"; 
 

 
json.rows.forEach(a => a.panels.forEach(
 
    b => b.targets.forEach(c => c.selectedCIID = newValue))); 
 

 
document.write('<pre>' + JSON.stringify(json, 0, 2)+ '</pre>');

0

Его не очень короткие из-за сложной структуры вас JSon.

var data = { 
    "rows": [{ 
    "title": " row 1", 
    "panels": [{ 
     "targets": [{ 
     "selectedCIID": "5856742957ce424b8db6cfb309b6b013", 
     "series": "" 
     }] 
    }] 
    }, { 
    "title": "row 2", 
    "panels": [{ 
     "targets": [{ 
     "selectedCIID": "5856742957ce424b8db6cfb309b6b013", 
     "series": "" 
     }] 
    }, { 
     "targets": [{ 
     "selectedCIID": "5856742957ce424b8db6cfb309b6b013", 
     "series": "" 
     }] 
    }] 
    }] 
} 

var transformedData = _.each(data.rows, function(row) { 
    _.each(row.panels, function(panel) { 
    _.each(panel.targets, function(target) { 
     target.selectedCIID = 'new value'; 
    }); 
    }); 
}); 

console.log(transformedData); 

Вот jsfiddle

0

Я использовал _.forIn и его работу для меня.

var dashboard = results.dashboard; 
      var dashboardJson = angular.fromJson(dashboard); 
      if(ciid.length > 1) { 
      _.forIn(dashboardJson.rows, function(value0) { 
       _.forIn(value0.panels, function(value1) { 
       _.forIn(value1.targets, function(value2) { 
        value2.selectedCIID = ciid; 
       }); 
       }); 
      }); 
      } 
Смежные вопросы