Как преобразовать объект JavaScript в строку таблицы?

#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 );