如何从两个数组创建键值数组

时间:2018-08-20 11:27:52

标签: javascript arrays

我有两个数组,它们具有相同数量的元素,可以映射1:1

const array1 = [1, 3, 2]
const array2 = [U2, U1, U3]

如何从array1和array2生成一个新的数组(或映射),并具有类似的内容?

const result = [[1, U1], [2, U2], [3, U3]]

2 个答案:

答案 0 :(得分:3)

您也可以使用Array.forEach()。在此之前,您可以对array1数组进行排序,然后从以array2为前缀的U中获取相应的值,以获取所需的输出:

const array1 = [1, 3, 2];
const array2 = ['U2', 'U1', 'U3'];
const result = [];
array1.sort(function(a,b){
  return a-b;
})
array1.forEach((elem, index) => result.push([elem, array2[array2.indexOf('U'+elem)]]));
console.log(result);

如果前缀并非总是U,则可以使用该前缀:

const array1 = [1, 3, 2];
const array2 = ['U2', 'U1', 'U3'];
const result = [];
array1.sort(function(a,b){
  return a-b;
})
array1.forEach((elem) => {
  var array2Val = array2.find(val => val.indexOf(elem) !== -1);
  result.push([elem, array2Val]);
});
console.log(result);

答案 1 :(得分:0)

您可以按各项的数值对数组进行分组。

var array1 = [1, 3, 2],
    array2 = ['U2', 'U1', 'U3'],
    result = Object.values([array1, array2].reduce(
        (o, a) => {
            a.forEach(v => {
                var k = v.toString().match(/\d+$/)[0];
                (o[k] = o[k] || []).push(v);
            });
            return o;
        },
        Object.create(null)
    ));
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }