使用 TypeScript
下面是一个对象数组&我想将它映射到一个新对象,如下所示。(见预期结果)
// input array
const getPostAPI =
[
{
get: '1234',
post: 'abcd',
},
{
get: '3423',
post: 'dfcv',
},
{
get: '1234',
post: 'iucv',
},
{
get: '1234',
post: 'oipl',
},
{
get: '3423',
post: 'ffgf',
},
{
get: '4567',
post: 'tyui',
},
]从上面的对象数组中,我希望将post值映射为用于重复get值的数组。下面我已经给出了扩展的结果。
// output object
const exptectedResult = {
'1234': ['abcd',
'iucv',
'oipl',
'1234',],
'3423': ['dfcv',
'ffgf'],
'4567': ['tyui']
}以下是我尝试过的。但它正在覆盖一些价值。也就是说,我没有得到对应get键数组中的确切元素数。(比实际少一个)
this.getPostMap = this.getPostAPI.reduce(
(map, api) => ({
...map,
[api.get]: map[api.get]
? [...map[api.get], api.post]
: [] || [],
}),
{}
);发布于 2020-08-12 18:45:10
这段简单的代码将非常顺利地工作。
getPostAPI.reduce((acc, el)=>{
(acc[el.get] = acc[el.get] || []).push(el.post)
return acc
}, {})发布于 2020-08-12 18:45:40
这是一个非常可怕和不可读的代码块,可以做一些非常简单的事情。例如:
const getPostAPI = [{
get: '1234',
post: 'abcd',
},
{
get: '3423',
post: 'dfcv',
},
{
get: '1234',
post: 'iucv',
},
{
get: '1234',
post: 'oipl',
},
{
get: '3423',
post: 'ffgf',
},
{
get: '4567',
post: 'tyui',
},
];
const expectedResult = getPostAPI.reduce((map, {get,post}) =>
(map[get] = map[get] || []).push(post) && map,
{});
console.log(expectedResult);
发布于 2020-08-12 19:05:03
您的问题是,当get属性未定义时,您实际上希望使用第一个post而不是一个空对象来实现它:
this.getPostMap = this.getPostAPI.reduce(
(map, api) => ({
...map,
[api.get]: map[api.get]
? [...map[api.get], api.post]
: [api.post],
}),
{}
);https://stackoverflow.com/questions/63382825
复制相似问题