将数据从嵌套数组转换为对象

时间:2016-11-16 06:57:25

标签: javascript arrays

我试图改变这一点:

 var pets = [
        [
            ['dog', 'Harry'], ['age', 2]
        ],
        [
            ['dog', 'Roger'], ['age', 5]
        ]
    ]

进入这个:

var dogs = [
    {dog: 'Harry', age: 2},
    {dog: 'Roger', age: 5}
    ]

我一直卡住了。这是我到目前为止所做的。任何指向正确方向的指针都将非常感激。任何有关使其更具可读性的建议对我来说也会有所帮助。感谢

function arrayToObj(arr) {
  var newArray = [];
  for (var i = 0; i < arr.length; i++) {
    var obj = {};
    for (var j = 0; j < arr[i].length; j++) {
      var key = arr[i][j][0];
      obj[key] = key;
    }
    newArray[i] = obj;
  }
  return newArray; 
}

8 个答案:

答案 0 :(得分:1)

您可以使用Array#mapArray#reduce方法。

&#13;
&#13;
var pets = [
  [
    ['dog', 'Harry'],
    ['age', 2]
  ],
  [
    ['dog', 'Roger'],
    ['age', 5]
  ]
];


var dogs = pets.map(function(v) { // iterate over the array
  return v.reduce(function(obj, arr) { // iterate over inner array to generate object
    obj[arr[0]] = arr[1]; // define object property based on inner array element
    return obj; // return updated object 
  }, {}); // set initial value as an empty object
})

console.log(dogs);
&#13;
&#13;
&#13;

仅供参考:如果您想坚持使用自己的代码,则需要使用obj[key] = key;更新第obj[key] = arr[i][j][1];行,或者不需要{{1}变量简单地使用单行代码key

&#13;
&#13;
obj[arr[i][j][0]] = arr[i][j][1];
&#13;
&#13;
&#13;

答案 1 :(得分:1)

这是Map构造函数可以自动执行的操作:

var dogs = pets.map(pairs => new Map(pairs))

答案 2 :(得分:1)

function arrayToObj(arr) {
  return arr.map((item) => {
     var object = {};
     item.forEach((data) => {
       object[data[0]] = data[1];
     })
     return object
  })
}

答案 3 :(得分:0)

 var pets = [
    [
        ['dog', 'Harry'], ['age', 2]
    ],
    [
        ['dog', 'Roger'], ['age', 5]
    ]
]



var petArr = pets.reduce(function(a, b) {
  var obj = {}
  b.forEach(function(set){
    obj[set[0]] = set[1]
  })
  return a.concat(obj)
}, [])

console.log(petArr)

答案 4 :(得分:0)

更改nodetool assassinate而不是obj[key] = arr[i][j][1];

我可以用map和其他数组方法完成,但我想表明你错了。

&#13;
&#13;
obj[key] = key
&#13;
&#13;
&#13;

答案 5 :(得分:0)

我希望以下脚本能为您提供帮助。

function arrayToObj(arr) {
        var newArray = [];
        for (var i = 0; i < arr.length; i++) {
            var obj = {
                dog: '',
                age: ''
            };

            obj.dog = arr[i][0][1];
            obj.age = arr[i][1][1];
            newArray.push(obj);
        }
        return newArray;
    }

答案 6 :(得分:0)

  

您可以使用嵌套在for()循环中的简单forEach()循环来获取所需的结果。 QUICK-TEST HERE

&#13;
&#13;
var pets = [
  [
    ['dog', 'Harry'],
    ['age', 2]
  ],
  [
    ['dog', 'Roger'],
    ['age', 5]
  ]
];

function arrayToObject(arrData) {
  var objData = [];
  arrData.forEach(function(data, index) {
    var tmpObject = {};
    for (var i = 0; i < data.length; i++) {
      var arr = data[i];
      tmpObject[arr[0]] = arr[1];
    }
    objData.push(tmpObject);
  });
  return objData;
}

console.log( arrayToObject(pets) );
&#13;
&#13;
&#13;

    // YIELDS::
        Array[2]
            0: Object
                age: 2
                dog: "Harry"
            1: Object
                age: 5
                dog: "Roger"

</script>

答案 7 :(得分:0)

您可以将值作为属性分配给数组,将数组长度设置为零,并将数组类型转换为普通对象,并将其分配给同一元素。

&#13;
&#13;
NSURL *imagePath = [[NSURL alloc] initWithString:[[NSBundle mainBundle] pathForResource:@"example" ofType:@"gif"]];
NSData *gifItem = [NSData dataWithContentsOfURL:imagePath];
NSArray *sharingItems = @[gifItem, @"TEST"];
UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:sharingItems applicationActivities:nil];
[self presentViewController:activityController animated:YES completion:nil];
&#13;
&#13;
&#13;