2016-03-21 21 views
1

我想用我的變量替換selectedCIID的值。 我可以使用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

是'targets'總是一個元素的數組? – 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; 
       }); 
       }); 
      }); 
      }