将数组转换为自定义格式

时间:2015-11-23 06:49:59

标签: javascript arrays

如何将以下数组转换为另一种格式,如下所示:

我的阵列:

var test=[{"1":"Input"},{"2":"Output"}]

转换数组:

var result=

    [
        {
            "id": "1",
            "name": "Input"
        },
        {
            "id": "2",
            " name": "Output"
        }
    ]

我尝试使用此代码但无法正常工作。

var result = [];
for (var i = 0; i < test.length; i++) {
  var newArray = {
    id: Object.keys(test[i])[i],
    name: test[i].name
  }
  result.push(newArray);
}

2 个答案:

答案 0 :(得分:4)

内部数组对象没有name属性,因此test[i].name将是未定义的。您需要使用键值获取值。您也可以使用 map() 代替 for 循环来简化代码。

&#13;
&#13;
var test = [{
  "1": "Input"
}, {
  "2": "Output"
}];

var res = test.map(function(v) { // iterating over array object 
  var k = Object.keys(v)[0]; // getting object keys as an array & retrieving first key
  return {
    id: k, // setting id property as key
    name: v[k] // and name property as value
  }
});

document.write('<pre>' + JSON.stringify(res, null, 3) + '</pre>');
&#13;
&#13;
&#13;

答案 1 :(得分:3)

您应该使用array.prototype.map使用转换函数将数组转换为另一个数组。

array.prototype.map会对所有项目进行迭代,并对每个项目运行“转换功能”。

由于您的商品是一个如下所示的键值:{"1":"Input"},您唯一的问题是您不知道密钥。

要获取每个对象的键,可以使用Object.keys方法。

var test=[{"1":"Input"},{"2":"Output"}]; // input

var newArr = test.map(function(item){
   var key = Object.keys(item)[0]; // get the object's keys and take the only key.
   return {id: key, name: item[key]} // return the new object
});