我有这个 json 对象:
const data = {
one: {
items: [
{
title: 'Home',
url: '',
},
{
title: 'Title test',
url: '/test',
},
],
},
two: {
items: [
{
title: 'Title test 2',
url: '/test2',
},
{
title: 'Title test 2',
url: '/test2',
},
],
},
};
如何创建一个简单的辅助函数(javascript 和打字稿,它从对象键
items
或 one
返回 two
数组?
我试过这个:
interface Item {
title: string;
url: string;
}
const getItems = (key?: 'one') => {
if (key === 'one') {
return data.one.items.map((item: Item) => ({
title: item.title,
url: item.url,
}));
}
return data.two.items.map((item: Item) => ({
title: item.title,
url: item.url,
}));
};
但是当我尝试上面的方法时却不起作用,这是为什么呢?是否也可以简化并得到相同的结果?
const items = getItems('one');
items.map((item) => (
<li>{item.title}</li>
));
您可以使用
Object.values
和 Array.prototype.reduce
获取对象数组,如下所示:
const data = {
one: {
items: [{
title: 'Home',
url: '',
},
{
title: 'Title test',
url: '/test',
},
],
},
two: {
items: [{
title: 'Title test 2',
url: '/test2',
},
{
title: 'Title test 2',
url: '/test2',
},
],
},
};
const result = Object.values(data).reduce((acc, curr) => {
acc.push(...curr.items);
return acc
}, []);
console.log(result);