如何在javascript中将键值对对象数组转换为关联数组
你们从来没有让我失望过,我在这个问题上有点紧张,我需要在将java映射转换为JSON对象时保持其顺序,我意识到这几乎是不可能的,于是决定使用JSON数组。但是,这对我的特定数据有效的唯一方法是使用JSON对象的JSON数组。看起来是这样的:如何在javascript中将键值对对象数组转换为关联数组,javascript,arrays,json,javascript-objects,Javascript,Arrays,Json,Javascript Objects,你们从来没有让我失望过,我在这个问题上有点紧张,我需要在将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}] 让我来到这里的
[{"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;
}
有什么想法吗?试试这个
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_对象是数组而不是对象,您不应该在..中使用。。语句对对象的可枚举属性进行迭代。在我的示例中,我使用返回对象中键的数组,您可以通过对象中的键获取值,因为在JS中,从对象获取属性有两种方式,如obj.key或obj[key]
演示:我想这就是你想要的:。JS没有关联数组,它有是的这是我想要的,我道歉。我的问题是,我试图从对象数组中提取值并将其放入新对象的方式不起作用?@FelixKling在a中,JS起作用,它们只是不被称为关联数组。@ajp15243:Mmmh,是的。对我来说,术语数组也意味着一种顺序,就像它在PHP中工作一样。但是,对象的属性不是有序的。但我想关联数组实际上只是一个字典,在这种情况下我同意。@RichardDavy:我想你不想做我链接到的事情。看起来您只是在for…in循环中遇到了问题。查看文档以了解其工作原理:
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;
};