将对象中的数组更改为其他obejct attr

时间:2016-05-21 11:27:07

标签: javascript arrays node.js object

我有一个像这样的数组对象:

[
  {
    "position": "1",
    "name": "FC Barcelona",
    "data": [
      "91",
      "38",
      "29",
      "4",
      "5",
      "112",
      "29"
    ]
  },
  {
    "position": "2",
    "name": "Real Madrid",
    "data": [
      "90",
      "38",
      "28",
      "6",
      "4",
      "110",
      "34"
    ]
  },
  {
    "position": "3",
    "name": "Atlético Madrid",
    "data": [
      "88",
      "38",
      "28",
      "4",
      "6",
      "63",
      "18"
    ]
  }
]

我希望将它转换为faceJ中的nodeJS后端我希望使用vanilla javascript进行转换:

[
  {
    "position": "1",
    "name": "FC Barcelona",
    "PTS": "91",
    "Pld" "38",
    "W": "29",
    "D": "4",
    "L": "5",
    "GF": "112",
    "GA": "29"
  },
  {
    "position": "2",
    "name": "Real Madrid",
    "PTS": "90",
    "Pld" "38",
    "W": "28",
    "D": "6",
    "L": "4",
    "GF": "110",
    "GA": "34"
  },
  {
    "position": "3",
    "name": "Atlético Madrid",
    "PTS": "88",
    "Pld" "38",
    "W": "28",
    "D": "4",
    "L": "6",
    "GF": "63",
    "GA": "18"
  }
]

我希望获取主数组中任何对象的数据数组,并将数据数组的任何子数转换为它自己对象的子项,并使用我添加到代码中的特定键

3 个答案:

答案 0 :(得分:3)

您可以使用forEach

执行此操作



var ar = [{"position":"1","name":"FC Barcelona","data":["91","38","29","4","5","112","29"]},{"position":"2","name":"Real Madrid","data":["90","38","28","6","4","110","34"]},{"position":"3","name":"Atlético Madrid","data":["88","38","28","4","6","63","18"]}],
  result = [];

ar.forEach(function(e) {
  result.push({
    position: e.position,
    name: e.name,
    PT: e.data[0],
    Pld: e.data[1],
    W: e.data[2],
    D: e.data[3],
    L: e.data[4],
    GF: e.data[5],
    GA: e.data[6]
  })
})

console.log(result)




答案 1 :(得分:1)

我不完全确定你的意思,但我想你想把数据中的所有内容相加并将它分配给不同数组中的自己的对象?

如果是这样,this可能会做你想要的。

示例输出(使用您的数据集):

[ { position: '1', name: 'FC Barcelona', sum: 308 },                                                                                                            
{ position: '2', name: 'Real Madrid', sum: 310 },                                                                                                             
{ position: '3', name: 'Atlético Madrid', sum: 245 } ]   

答案 2 :(得分:1)

使用map

也可以实现这一目标
var ar = [{"position":"1","name":"FC Barcelona","data":["91","38","29","4","5","112","29"]},{"position":"2","name":"Real Madrid","data":["90","38","28","6","4","110","34"]},{"position":"3","name":"Atlético Madrid","data":["88","38","28","4","6","63","18"]}],

var result = ar.map(function(e) {
  return{
    position: e.position,
    name: e.name,
    PT: e.data[0],
    Pld: e.data[1],
    W: e.data[2],
    D: e.data[3],
    L: e.data[4],
    GF: e.data[5],
    GA: e.data[6]
  };
});

console.log(result)