平面数据的键值对

时间:2017-04-12 18:55:24

标签: javascript javascript-objects

嗨我有一个来自MongoDB的列的JavaScript对象数组。列包含其键和值作为数组。这是我的代码

[  
   {  
      "F":"Age Min",
      "H":"Age Min",
      "L":"",
      "V":[  
         "1",
         "2",
         "3"
      ]
   },
   {  
      "F":"Age Max",
      "H":"Age Max",
      "L":"",
      "V":[  
         "12",
         "30",
         "4"
      ]
   }
]

我想要的输出是

[  
   {  
      "Age Min":1,
      "Age Max":12
   },
   {  
      "Age Min":2,
      "Age Max":30
   },
   {  
      "Age Min":3,
      "Age Max":4
   }
]

需要帮助,我正在努力获得所需的输出。 感谢。

3 个答案:

答案 0 :(得分:1)

var input = [  
   {  
      "F":"Age Min",
      "H":"Age Min",
      "L":"",
      "V":[  
         "1",
         "2",
         "3"
      ]
   },
   {  
      "F":"Age Max",
      "H":"Age Max",
      "L":"",
      "V":[  
         "12",
         "30",
         "4"
      ]
   }
];

var output = [];
for (var i = 0; i < input.length; i++) {
  var prop = input[i];
  for (var j = 0; j < prop.V.length; j++) {
    if (j >= output.length) { output[j] = {}; }
    var o = output[j];
    o[prop.F] = prop.V[j];
  }
}

console.log(output);

答案 1 :(得分:1)

您可以迭代外部数组和内部数组,并使用转置数据构建一个新对象。

&#13;
&#13;
var array = [{ F: "Age Min", H: "Age Min", L: "", V: ["1", "2", "3"] }, { F: "Age Max", H: "Age Max", L: "", V: ["12", "30", "4"] }],
    result = array.reduce(function (r, a) {
        a.V.forEach(function (b, i) {
            r[i] = r[i] || {};
            r[i][a.F] = b;
        });
        return r;
    }, []);
    
console.log(result);
&#13;
&#13;
&#13;

ES6风格小巧。

&#13;
&#13;
var array = [{ F: "Age Min", H: "Age Min", L: "", V: ["1", "2", "3"] }, { F: "Age Max", H: "Age Max", L: "", V: ["12", "30", "4"] }],
    result = array.reduce((r, a) => (a.V.forEach((b, i) => (r[i] = r[i] || {})[a.F] = b), r), []);
    
console.log(result);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以使用Array#reduceArray#forEach重新构建数据:

&#13;
&#13;
var data = [{
    "F": "Age Min",
    "H": "Age Min",
    "L": "",
    "V": ["1", "2", "3"]
  },
  {
    "F": "Age Max",
    "H": "Age Max",
    "L": "",
    "V": ["12", "30", "4"]
  }
]

var result = data.reduce(function(result, field, init) {
  field.V.forEach(function(value, i) {
    if (!init) result[i] = {}
    result[i][field.F] = +value
  })
  return result
}, [])

console.log(result)
&#13;
.as-console-wrapper { min-height: 100%; }
&#13;
&#13;
&#13;