如何在JavaScript中将多维数组填充到多维对象?

How to populate A multi-dimensional array to multi-dimension object in JavaScript?

很长一段时间以来,我一直在尝试计算如何将我的二维数组填充到对象中。我尝试使用 _.map(),但它没有给我预期的结果。

我有一个存储的数组:

// My array
var myArray = [ [foo, bar, fiz], [faz, far, fee] ];

// My object
var myObject = {
    key1: {
        val1: 1,
        val2: 2,
        val3: 3
    },
    key2: {
        val1: 1,
        val2: 2,
        val3: 3
    }
}

我想要达到的结果是:

var myObject = {
    key1: {
        val1: foo,
        val2: bar,
        val3: fiz
    },
    key2: {
        val1: faz,
        val2: far,
        val3: fee
    }
}

这是我目前得到的:

_.map(myObj, x => {
    for (var i = 0; myArray.length; i++) {
        x.val1 = myArray[i][0];
        x.val2 = myArray[i][1];
        x.val3 = myArray[i][2];
    }
}

我遇到的问题 _.map() 我希望它只迭代一次。由于数组和对象的长度相同,我认为没有必要迭代两次。不幸的是我的数组没有可以用来区分的键,否则我会使用 Object.assign().

由于对象的原始值被丢弃,并且对象的键可以很容易地复制,您可以使用 2 Array#reduce 方法从数组构建对象:

var myArray = [ ['foo', 'bar', 'fiz'], ['faz', 'far', 'fee'] ];

var myObject = myArray.reduce(function(obj, arr, i) {
  obj['key' + (i + 1)] = arr.reduce(function(o, item, j) {
    o['val' + (j + 1)] = item;
    return o;
  }, {});
  
  return obj;
}, {});

console.log(myObject);

对于转换,每个数组都需要一个双嵌套循环。然后生成密钥并构建对象和内容。

var array = [['foo', 'bar', 'fiz'], ['faz', 'far', 'fee']],
    object = {};
    
array.forEach(function (a, i) {
    var key = 'key' + (1 + i);
    object[key] = object[key] || {};
    a.forEach(function (b, j) {
        object[key]['val' + (1 + j)] = b;
    })
});

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

对于可变键,您可以使用一些带有键的数组并将其作为外层和内层。

var array = [['foo', 'bar', 'fiz'], ['faz', 'far', 'fee']],
    topKeys = ['key1', 'key2'],
    subKeys = ['val1', 'val2', 'val3'],
    object = {};
    
array.forEach(function (a, i) {
    object[topKeys[i]] = object[topKeys[i]] || {};
    a.forEach(function (b, j) {
        object[topKeys[i]][subKeys[j]] = b;
    })
});

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