js多个数组(3个以上)如何合并成json形式

题目描述

arr1 = [1, 2, 3, 4, 5];
arr2 = [a1, a2, a3, a4, a5];
arr3 = [b1, b2, b3, b4, b5];
arr4 = [c1, c2, c3, c4, c5];
arr5 = [11, 22, 33, 44, 55];
多个数组类似这个形式,数组里内容是不定的
需要合并成这个形式
[
{ "a": "1", "b": "a1", "c": "b1", "d": "c1", "e":"11" },
{ "a": "2", "b": "a2", "c": "b2", "d": "c2", "e":"22" },
{ "a": "3", "b": "a3", "c": "b3", "d": "c3", "e":"33" },
{ "a": "4", "b": "a4", "c": "b4", "d": "c4", "e":"44" },
{ "a": "5", "b": "a5", "c": "b5", "d": "c5", "e":"55" }
]

两个数组 我用的2个for循环嵌套 和if语句判断 push到对象里
如果更多(5-6个数组)有什么更好的办法。

阅读 5.7k
3 个回答

动态传入数组,动态计算 key,即可,代码如下:

const arr1 = [1, 2, 3, 4, 5];
const arr2 = ['a1', 'a2', 'a3', 'a4', 'a5'];
const arr3 = ['b1', 'b2', 'b3', 'b4', 'b5'];
const arr4 = ['c1', 'c2', 'c3', 'c4', 'c5'];
const arr5 = [11, 22, 33, 44, 55];

function parse (...arrList) {
    const result = []
    for (let i = 0, l = arrList.length, arr, key; i < l; i++) {
        arr = arrList[i]
        key = String.fromCharCode(97 + i)
        for (let j = 0, l = arr.length; j < l; j++) {
            if (!result[j]) {
                result[j] = {}
            }
            result[j][key] = arr[j]
        }
    }
    return result
}

parse(arr1, arr2, arr3, arr4, arr5)

看错问题,再修改一下:

import _ from 'lodash'
const arr1 = [1, 2, 3, 4, 5];
const arr2 = ['a1', 'a2', 'a3', 'a4', 'a5'];
const arr3 = ['b1', 'b2', 'b3', 'b4', 'b5'];
const arr4 = ['c1', 'c2', 'c3', 'c4', 'c5'];
const arr5 = [11, 22, 33, 44, 55];
const result = _.zip(arr1, arr2, arr3, arr4, arr5)
console.log(result)

如下所示,其中arrs为数组组成的数组,keys为自定义的key数组

arrs2json(arrs, keys) {
    return arrs[0].map((col, index_col) => {
        return arrs
            .map((row, index_row) => {
                return { [keys[index_row]]: row[index_col] };
            })
            .reduce((k, v) => {
                return { ...k, ...v };
            });
    });
}

使用方法示例:

arrs2json(
    [
        [1, 2, 3],
        ['a', 'b', 'c'],
        ['sd', 'bj', 'sh'],
    ],
    ['id', 'name', 'addr']
);
推荐问题