javascript - 将数组数组转换为对象数组
问题描述
我有一个数组数组(二维数组),我想将它转换成一个对象数组。在结果数组中,我希望每个对象都有一个键名(请参阅下面的预期输出)
data = [
['Apple', 'Orange', 'Banana', 'Pears', 'Peach'],
[40, 35, 25, 58, 84],
[2, 4, 4, 3, 1, 2],
['Red', 'Yellow', 'Green', 'Violet', 'Blue']
];
我的预期结果:
expected_result = [
{name: 'Apple', price: 40, quantity: 2, color: 'Red'},
{name: 'Orange', price: 35, quantity: 4, color: 'Yellow'},
{name: 'Banana', price: 25, quantity: 4, color: 'Green'},
{name: 'Pears', price: 58, quantity: 1, color: 'Violet'},
{name: 'Peach', price: 84, quantity: 2, color: 'Blue'}
];
注意每个数组 (in data
) 的迭代应该是连续的,以便给出预期的结果
解决方案
一种解决方案包括首先在索引和要分配给它们的(或)名称之间创建一个Map (但是可以用这样的数组替换它)。此外,您可以获取内部数组的 ,以便稍后检查是否没有创建不具有所有属性的数组。完成此预初始化后,您可以使用Array.reduce()生成预期结果:outter-array
property
key
["name","price","quantity","color"]
minimun length
objects
const data = [
['Apple', 'Orange', 'Banana', 'Pears', 'Peach'],
[40, 35, 25, 58, 84],
[2, 4, 4, 3, 1, 2],
['Red', 'Yellow', 'Green', 'Violet', 'Blue']
];
let mapIdxToProp = new Map([[0, "name"],[1, "price"],[2, "quantity"],[3, "color"]]);
let minLen = Math.min(...data.map(x => x.length));
let res = data.reduce((acc, arr, idx) =>
{
arr.forEach((x, j) =>
{
(j < minLen) && (acc[j] = acc[j] || {}, acc[j][mapIdxToProp.get(idx)] = x);
});
return acc;
}, []);
console.log(res);
推荐阅读
- python - 启动 PyFladesk 应用程序在 Windows 10 上出现 ucrtbase.dll 错误
- java - 如何滚动到“手表部分”Appium
- nginx - ClusterIP:无和失败的 pod
- java - 在二十一点游戏中制造一段时间的麻烦
- c# - 具有通用 TypeOf 的过滤器模式
- postgresql - CTE 中是否需要 SELECT FOR UPDATE 进行更新?
- php - 雄辩的关系和多维收集拒绝
- angular - 材质仪表板角度主题
- java - RabbitMQ 不等价 arg 'x-max-length-bytes' 异常
- javascript - 使用打字稿创建日期 + 07/12/9999 时出现错误