#javascript #jquery
Вопрос:
У меня есть этот объект.
{"SI":{"0":"1","1":""},"Description of Goods":{"0":"LTD","1":"TET"},"HSN/SAC":{"0":"38220090","1":""},"MRP/ Marginal":{"0":"849.00/NO","1":""},"Quantity":{"0":"30 NO 30 NO","1":""},"Rate":{"0":"470.00","1":""},"per":{"0":"NO","1":""},"Amount":{"0":"14,100.00","1":"846.00 "}}
Я хочу преобразовать его в
[{Amount: "14,100.00",Description of Goods: "LTD",HSN/SAC: "38220090",MRP/ Marginal:"849.00/NO",Quantity: "30 NO 30 NO",Rate: "470.00",SI: "1",per: "NO"} ,{Amount: "",Description of Goods: "TET",HSN/SAC: "",MRP/ Marginal:"",Quantity: "",Rate: "",SI: "1",per: "",Amount : "846.00 "}]
Здесь в объекте есть 2 строки, но их может быть больше.
Комментарии:
1. Это не кажется слишком сложным. Что вы пробовали до сих пор? для … это было бы началом.
Ответ №1:
Вы можете использовать for ... of
со Object.entries(obj)
следующим:
let oOld = {"SI":{"0":"1","1":""},"Description of Goods":{"0":"LTD","1":"TET"},"HSN/SAC":{"0":"38220090","1":""},"MRP/ Marginal":{"0":"849.00/NO","1":""},"Quantity":{"0":"30 NO 30 NO","1":""},"Rate":{"0":"470.00","1":""},"per":{"0":"NO","1":""},"Amount":{"0":"14,100.00","1":"846.00 "}};
let oNew = [];
for(let [key,value] of Object.entries(oOld)) {
for(let [k,v] of Object.entries(value)) {
if( !oNew[ k] ) {
oNew.push({});
}
oNew[ k][key] = v;
}
}
console.log( oNew );
В качестве альтернативы вы можете использовать .map()
.reduce()
следующие методы и:
let oOld = {"SI":{"0":"1","1":""},"Description of Goods":{"0":"LTD","1":"TET"},"HSN/SAC":{"0":"38220090","1":""},"MRP/ Marginal":{"0":"849.00/NO","1":""},"Quantity":{"0":"30 NO 30 NO","1":""},"Rate":{"0":"470.00","1":""},"per":{"0":"NO","1":""},"Amount":{"0":"14,100.00","1":"846.00 "}};
let oNew = Object.entries(oOld).map(([key,value]) => ([key,Object.entries(value)])).map(([key,value]) => value.map(val => ({[key]:val[1]}))).reduce((acc,val) => val.map((v,i) => (acc[i] || acc.push([])) amp;amp; acc[i].concat(v)), []).map(a => a.reduce((acc,val) => Object.assign(acc,val),{}));
console.log( oNew );