javascript - 从具有相同键的对象创建二维数组
问题描述
我有一组要转换的对象。我的数据集如下所示:
[
{
day: sunday,
val: 20
},
{
day: sunday,
val: 20
},
{
day: monday,
val: 10
},
{
day: monday,
val: 30
},
{
day: tuesday,
val: 5
},
{
day: tuesday,
val: 5
}
]
我正在尝试将数据转换为如下所示:
输出:
[[20,20], [10,30], [5, 5]]
每个嵌套数组都基于对象中的星期几。有任何想法吗?
谢谢!
解决方案
您可以按他们的项目对您的项目进行分组day
。拥有组后,您可以获取地图的值并将项目列表映射到val
.
const data = [
{ day: 'sunday' , val: 20 }, { day: 'sunday' , val: 20 },
{ day: 'monday' , val: 10 }, { day: 'monday' , val: 30 },
{ day: 'tuesday' , val: 5 }, { day: 'tuesday' , val: 5 }
];
const transformed = Object.values(data.reduce((map, item) =>
({ ...map, [item.day] : [ ...(map[item.day] || []), item]
}), {})).map(list => list.map(item => item.val));
console.log(transformed);
.as-console-wrapper { top: 0; max-height: 100% !important; }
或者,您可以立即减少值,但会丢失所有项目属性。
const data = [
{ day: 'sunday' , val: 20 }, { day: 'sunday' , val: 20 },
{ day: 'monday' , val: 10 }, { day: 'monday' , val: 30 },
{ day: 'tuesday' , val: 5 }, { day: 'tuesday' , val: 5 }
];
const transformed = Object.values(data.reduce((map, item) =>
({ ...map, [item.day] : [ ...(map[item.day] || []), item.val] }), {}));
console.log(transformed);
.as-console-wrapper { top: 0; max-height: 100% !important; }
这是一个功能版本:
const data = [
{ day: 'sunday' , val: 20 }, { day: 'sunday' , val: 20 },
{ day: 'monday' , val: 10 }, { day: 'monday' , val: 30 },
{ day: 'tuesday' , val: 5 }, { day: 'tuesday' , val: 5 }
];
const toMatrix = (list, key, valFn) => Object.values(data.reduce((map, item) =>
({ ...map, [item[key]] : [ ...(map[item[key]] || []), valFn(item) ] }), {}))
console.log(toMatrix(data, 'day', item => item.val));
.as-console-wrapper { top: 0; max-height: 100% !important; }
推荐阅读
- xcode - 命令 CompileSwiftSources 失败,退出代码为非零
- reactjs - 如何使 ant-design 抽屉组件宽度响应
- image - Docker 设置限制 (restrict, fix) 镜像版本标签以仅拉取 (FROM) 一个具体的主要发布版本号
- java - 在 couchbase 服务器 5.1.1 中更新文档
- javascript - jquery 没有正确返回由 's 组成的字符串
- r - 当R中有多个模式时,给出选择一种模式的条件
- ios - 多行 UILabel 导致额外的填充
- php - 如何将查询限制为在 PHP 搜索表单中至少需要五个正确字符
- node.js - 在 mongodb 和 nodejs 中减少类型为 number 的字段
- ios - Swift:带有单元格的表格(相同的属性不同的内容;可点击)