[英]How can I convert an array of key value pair objects into an associative array in javascript
你们永远不会让我失望,我在这个问题上处于一个紧要关头,我需要在将Java映射转换为JSON对象时保持其顺序,我意识到这几乎是不可能的,因此我决定使用JSON数组。 但是,对我的特定数据起作用的唯一方法是使用JSON对象的JSON数组。 所以看起来像这样:
[{"2014-11-18":0},{"2014-11-19":0},{"2014-11-20":0},{"2014-11-21":0},{"2014-11-22":0},{"2014-11-23":0},{"2014-11-24":0}]
使我在这里的代码:
public static JSONArray dataGenerationDay(ArrayList<String> comp, int days) {
DateTimeFormatter formatter = DateTimeFormat.forPattern("MM-dd-yyyy");
Map<LocalDate, Integer> compMap = new TreeMap<LocalDate, Integer>();
JSONArray orderedJSON = new JSONArray();
//create map of data with date and count
for (String date : comp) {
DateTime dt = formatter.parseDateTime(date);
LocalDate dateTime = new LocalDate(dt);
if (!compMap.containsKey(dateTime)) {
compMap.put(dateTime, 1);
} else {
int count = compMap.get(dateTime) + 1;
compMap.put(dateTime, count);
}
}
//if there were days missing in the DB create those days and put them in the map
//with a zero count
if (compMap.size() < days){
LocalDate today = LocalDate.now();
for (int i = 0; i < days; i++){
LocalDate dayCount = today.minusDays(days- i);
if (!compMap.containsKey(dayCount)) {
compMap.put(dayCount, 0);
}
}
}
//json object does not hold order of tree map, create json array
//of ?json objects? to maintain order for the graph
for (Map.Entry<LocalDate,Integer> entry : compMap.entrySet()){
JSONObject object = new JSONObject();
object.put("" + entry.getKey(), entry.getValue());
orderedJSON.put(object);
//test the order of the map for validity
System.out.println("Key Value Pair Is: " + entry.getKey() + " : " + entry.getValue());
}
//test the order of the array for validity
System.out.println("Ordered JSON List: " + orderedJSON.toString());
return orderedJSON;
}
希望我的代码达到标准,试图保持其尽可能整洁??? 但是回到问题。 这很好用,但是我遇到的问题是将对象数组转换为javascript中的关联数组,以便可以将其用于D3js条形图,这是我愚蠢地尝试但失败的代码
var dateToArray = function(json_object) {
var dayArray = [];
for (key in json_object){
dayArray.push({
"Date" : key[0],
"Count" : json_object[key[1]]
});
}
console.log("Here is su array" + dayArray);
return dayArray;
};
有任何想法吗?
尝试这个
var dateToArray = function(json_object) {
var dayArray = [],
key;
for (var i = 0; i < json_object.length; i++) {
key = Object.keys(json_object[i])[0];
dayArray.push({
"Date" : key,
"Count" : json_object[i][key]
});
}
return dayArray;
};
json_object是数组而不是对象,因此您不应使用for(.. in ..)(for(.. in ..)语句遍历对象的可枚举属性)。 在我的示例中,我使用Object.keys返回对象中的键数组,并且可以在Object中通过键获取值,因为在JS中,从对象获取属性的方法有两种,例如obj.key或obj [key]。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.