2017-07-24 60 views
-4

我想将JavaScript对象的结构更改为另一个结构。我的问题是,对于每个对象,我要创建多达三个不同的对象:如何更改对象结构

我输入:

[ 
    {date: "21-05", cash: "500", card: "200", points: "100"}, 
    {date: "26-05", card: "100", points: "50"} 
] 

所需的输出:

[ 
    {date: "21-05", amount: "500", paymentType: cash }, 
    {date: "21-05", amount: "200", paymentType: card }, 
    {date: "21-05", amount: "200", paymentType: points }, 
    {date: "26-05", amount: "100", paymentType: card }, 
    {date: "26-05", amount: "50", paymentType: points } 
] 

现金,卡,点是全球const

+3

你尝试过什么?循环它并将三个新对象推送到一个数组。 – Prinzhorn

+2

这两个例子都是无效的JSON。 – Quentin

+0

'date:“21-05”,'不是JSON。在JSON中,密钥必须包含在双引号中。您显示的对象是JavaScript对象。 JavaScript中的JSON是数据的字符串表示形式,因此JSON数据始终是字符串类型。 –

回答

0

你可以遍历数组和按键,并检查是否不date,然后建立与数据的新对象。收集直到访问所有对象。

var data = [{ date: "21-05", cash: "500", card: "200", points: "100" }, { date: "26-05", card: "100", points: "50" }], 
 
    result = data.reduce(function (r, o) { 
 
     Object.keys(o).forEach(function (k) { 
 
      if (k !== 'date') { 
 
       r.push({ date: o.date, amount: o[k], paymentType: k }); 
 
      } 
 
     }); 
 
     return r; 
 
    }, []); 
 
    
 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

您可以使用一对for循环:

const data = [ 
 
    {date:"21-05", cash: "500", card:"200", points:"100"}, 
 
    {date: "26-05", card:"100", points:"50"} 
 
]; 
 

 
const result = []; 
 
for (let row of data) { 
 
    for (let key in row) { 
 
     if (key !== 'date') { 
 
      result.push({ 
 
       data: row.date, 
 
       amount: row[key], 
 
       paymentType: key 
 
      }); 
 
     } 
 
    } 
 
} 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }