例如我有对象js
data = {"dt1_a": 20, "dt1_b": 30, "dt2_a": 40, "dt2_b": 50}
我想将数据转换为
data1 = {"dt1": {"a": 20, "b": 30}, "dt2": {"a": 40, "b": 50}}
请提出具体的解决方案。
答案 0 :(得分:5)
尝试类似
的内容var data1 = {};
$.each(data, function (key, value) {
var parts = key.split('_'),
p1 = parts[0];
if (!data1[p1]) {
data1[p1] = {};
}
data1[p1][parts[1]] = value;
})
console.log(data1)
演示:Fiddle
答案 1 :(得分:5)
抓取对象键并循环遍历它们,然后将正确的属性应用于新对象。
data = {"dt1_a": 20, "dt1_b": 30, "dt2_a": 40, "dt2_b": 50};
var data1 = {};
Object.keys(data).forEach(function(key){
var keySplit = key.split("_");
//create dt1, dt2 properties if they do not exist yet
data1[keySplit[0]] = data1[keySplit[0]] || {};
data1[keySplit[0]][keySplit[1]] = data[key]
});
请注意,如果浏览器没有polyfill can be used
,则依赖于支持forEach
的浏览器
您也可以在评论中使用for..in作为Joseph Marikle提及,这也更兼容
for(key in data){
var keySplit = key.split("_");
//create dt1, dt2 properties if they do not exist yet
data1[keySplit[0]] = data1[keySplit[0]] || {};
data1[keySplit[0]][keySplit[1]] = data[key]
}
答案 2 :(得分:1)
那么@Arun P Johny
& @Patrick Evans
已涵盖最佳方式。我想再分享一个答案,就像用简单的术语重写上述两个答案一样。
var final = {};
$.each(data, function (index, value) {
var arr = index.split('_'),
name = arr[0],
val = arr[1];
if (final[name]) {
final[name][val] = value;
} else {
final[name] = {};
final[name][val] = value;
}
});
console.log(final);