繁体   English   中英

将具有多个数组的对象转换为对象数组

[英]Convert object with multiple arrays to array of objects

我对从 API 获得的数据进行了大量处理:

这是数据返回的方式,数组的数量不同。

const objData = {
    arr1: [1,2,3],
    arr2: [1,2,1],
    arr3: [2,1,2],
    arr4: ["a","b", "c"]
}

这是它应该看起来的样子

const desired = [
    {a: 1, b: 1, c: 2, d: "a"},
    {a: 2, b: 2, c: 1, d: "b"},
    {a: 2, b: 1, c: 2, d: "c"}
]

这给了我想要的结果,但它不是动态的,因为我必须提供数组的名称,并且不允许更改对象中的数组数量。

const DataObj = []

for (let i = 0; i < objData.arr1.length; i++) {
    const objX = {
        a: objData.arr1[i],
        b: objData.arr2[i],
        c: objData.arr3[i],
        d: objData.arr4[i],
    }
    DataObj.push(objX)
}

有人可以帮我解决这个问题吗? 如何使其独立于数组的名称和数据集中的数组数量?

您可以使用新对象映射数组。

 const objData = { arr1: [1, 2, 3], arr2: [1, 2, 3], arr3: [2, 1, 2], arr4: ["a", "b", "c"] }, keys = { arr1: 'a', arr2: 'b', arr3: 'c', arr4: 'd' }, result = Object .entries(objData) .reduce((r, [key, array]) => array.map((v, i) => ({ ...r[i], [keys[key]]: v })), []); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

非功能方法,使用整数来获取您的字母

 const objData = { arr1: [1, 2, 3, 5], arr2: [1, 2, 1, 4], arr3: [2, 1, 2, 3], arr4: ["a", "b", "c", "d"] } const len = Object.values(objData)[0].length; let cnt = 97; let newObj = {}; const list = []; for (let i = 0; i < len; i++) { for (let key in objData) { newObj[String.fromCharCode(cnt)] = objData[key][i]; ++cnt } list.push(newObj); cnt = 97; newObj = {}; } console.log(list)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM