我有一个对象数组,它看起来像这样:
[
{date_range_one: '2018-03-03+-+2018-05-01'},
{date_range_two: '2001-11-27+-+2018-05-01'},
{filter: '1'},
{filter: '4'},
{filter: '18'},
]
我需要将其转换为:
[
{date_range_one: '2018-03-03+-+2018-05-01'},
{date_range_two: '2001-11-27+-+2018-05-01'},
{filter: [1,3,18]},
]
Object.assign会将过滤器值覆盖到最新值({filter:18}),但我需要将它们合并到(Array或String)中。
没有任何js库,有没有办法做到这一点?
干杯
答案 0 :(得分:3)
您可以使用地图并渲染收集的值。
它的工作原理是使用对象的键和值,并将数组设置为值或将值设置为itselft。
为了获取对象数组,将进行映射,其中使用键和值创建对象。
var data = [{ date_range_one: '2018-03-03+-+2018-05-01' }, { date_range_two: '2001-11-27+-+2018-05-01' }, { filter: '1' }, { filter: '4' }, { filter: '18' }],
result = Array.from(
data.reduce((m, o) => {
var [key, value] = Object.entries(o)[0],
item = m.get(key);
return m.set(key, item ? [].concat(item, value) : value);
}, new Map),
([k, v]) => ({ [k]: v })
);
console.log(Array.from(result));
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:2)
只需使用for循环:
const array = [
{date_range_one: '2018-03-03+-+2018-05-01'},
{date_range_two: '2001-11-27+-+2018-05-01'},
{filter: '1'},
{filter: '4'},
{filter: '18'},
];
const set = {}
for (const entry of array) {
const key = Object.keys(entry)[0];
const value = entry[key];
if (set.hasOwnProperty(key)) {
set[key] = [...set[key], value];
} else {
set[key] = value;
}
}
const result = Object.entries(set)
.map(([key, value]) => ({[key]: value}))
console.log(result)