将javascript对象格式化为特定结构
我有一个javascript对象,如下所示将javascript对象格式化为特定结构,javascript,jquery,Javascript,Jquery,我有一个javascript对象,如下所示 obj = {"account_id-0":null,"option_item_id-0":1,"value-0":"wer","account_id-1":null,"option_item_id-1":2,"value-1":"kkk","account_id-2":null,"option_item_id-2":3,"value-2":"qqqqq" .... "account_id-n":null,"option_item_id-n":6,"
obj = {"account_id-0":null,"option_item_id-0":1,"value-0":"wer","account_id-1":null,"option_item_id-1":2,"value-1":"kkk","account_id-2":null,"option_item_id-2":3,"value-2":"qqqqq"
....
"account_id-n":null,"option_item_id-n":6,"value-n":"see"
}
从上面的对象,我需要创建以下结构
{"0": {
account_id: null,
option_item_id: 1,
value: "wer"
},
"1": {
account_id: null,
option_item_id: 2,
value: "kkk"
},
"2": {
account_id: null,
option_item_id: 2,
value: "qqqqq"
},
.
.
.
"n": {
account_id: null,
option_item_id: 6,
value: "see"
}
}
关于如何实现这一点,您有什么想法吗?您可以遍历,并使用构造结果对象
让obj={
“帐户id-0”:空,
“选项项目id-0”:1,
“值-0”:“wer”,
“帐户id-1”:空,
“选项项目id-1”:2,
“价值1”:“kkk”,
“帐户id-2”:空,
“选项项目id-2”:3,
“价值2”:“QQQQ”,
“帐户id-n”:空,
“选项项目标识号”:6,
“值-0”:“请参阅”
};
让结果=Object.keys(obj).reduce((res,item)=>{
让[key,index]=item.split('-');
如果(!res[index]){
res[index]={};
}
res[索引][键]=对象[项目];
返回res;
}, {});
控制台日志(结果)代码>您可以遍历,并使用构造结果对象
让obj={
“帐户id-0”:空,
“选项项目id-0”:1,
“值-0”:“wer”,
“帐户id-1”:空,
“选项项目id-1”:2,
“价值1”:“kkk”,
“帐户id-2”:空,
“选项项目id-2”:3,
“价值2”:“QQQQ”,
“帐户id-n”:空,
“选项项目标识号”:6,
“值-0”:“请参阅”
};
让结果=Object.keys(obj).reduce((res,item)=>{
让[key,index]=item.split('-');
如果(!res[index]){
res[index]={};
}
res[索引][键]=对象[项目];
返回res;
}, {});
控制台日志(结果)代码>
var obj={
“帐户id-0”:空,
“选项项目id-0”:1,
“值-0”:“wer”,
“帐户id-1”:空,
“选项项目id-1”:2,
“价值1”:“kkk”,
“帐户id-2”:空,
“选项项目id-2”:3,
“值-2”:“QQQQ”
};
var-props=[];
函数getObj(ind){
for(道具中的var p){
如果(ind==p){
返回道具[p];
}
}
}
用于(obj中的var prop){
变量部分=项目拆分('-');
var键=零件[0];
var indx=零件[1];
var tmp=getObj(indx);
如果(tmp==未定义){
var x={};
x[indx]={};
x[indx][key]=obj[prop];
道具推(x);
}否则{
tmp[indx][key]=obj[prop];
}
}
控制台日志(道具)代码>
var obj={
“帐户id-0”:空,
“选项项目id-0”:1,
“值-0”:“wer”,
“帐户id-1”:空,
“选项项目id-1”:2,
“价值1”:“kkk”,
“帐户id-2”:空,
“选项项目id-2”:3,
“值-2”:“QQQQ”
};
var-props=[];
函数getObj(ind){
for(道具中的var p){
如果(ind==p){
返回道具[p];
}
}
}
用于(obj中的var prop){
变量部分=项目拆分('-');
var键=零件[0];
var indx=零件[1];
var tmp=getObj(indx);
如果(tmp==未定义){
var x={};
x[indx]={};
x[indx][key]=obj[prop];
道具推(x);
}否则{
tmp[indx][key]=obj[prop];
}
}
控制台日志(道具)代码>请尝试以下操作:
var keys = Object.keys(obj), i = 0
var arr = [], o = {}
for(var k in keys) {
if(keys[k].match(/\d*$/m) == i) {
o[keys[k].replace(/-\d*$/m,'')] = obj[keys[k]]
} else {
i++
arr.push(o)
o = {}
}
}
在这里,我使用的是数组,而不是键为“0”、“1”、“2”的对象。。。“n”。我觉得这样更方便。试试这个:
var keys = Object.keys(obj), i = 0
var arr = [], o = {}
for(var k in keys) {
if(keys[k].match(/\d*$/m) == i) {
o[keys[k].replace(/-\d*$/m,'')] = obj[keys[k]]
} else {
i++
arr.push(o)
o = {}
}
}
在这里,我使用的是数组,而不是键为“0”、“1”、“2”的对象。。。“n”。我觉得这样更方便。在我看来,这就像是一个字符串操作。到目前为止,您尝试了什么?对于一个简单的解决方案(性能效率可能达不到最佳水平),您可以使用lodash/下划线
实用程序,在我看来,它就像一个字符串操作。到目前为止,您尝试了什么?要获得简单的解决方案(性能效率可能达不到最佳水平),您可以使用lodash/下划线
实用程序