如何解决根据特定数据重新排列数组
我绝对不知道该写哪个标题。 其实,这是我从API中得到的:
[
{
"order": 1,"role": {
"label": "singer"
},"artist": {
"name": "AaRON"
}
},{
"order": 1,"role": {
"label": "author"
},"artist": {
"name": "Simon Buret"
}
},{
"order": 2,"artist": {
"name": "Olivier Coursier"
}
},"role": {
"label": "composer"
},"artist": {
"name": "John Doe"
}
}
]
这是我需要发送的:
"artist": {
"singer": [
"AaRON"
],"author": [
"Simon Buret","Olivier Coursier"
]
}
当然,必须考虑order属性。
示例:Simon Buret是第一项,因为他的订单设置为1。
我完全不知道如何实现,我只是做了一张地图,但是不知道在里面放什么:/
this.artistControl.controls.map(artistControl => {
...
});
有没有办法做我需要做的事?
解决方法
这对您有用吗?
let arr = [
{ "order": 1,"role": { "label": "singer" },"artist": { "name": "AaRON" } },{ "order": 1,"role": { "label": "author" },"artist": { "name": "Simon Buret" } },{ "order": 2,"artist": { "name": "Olivier Coursier" } },"role": { "label": "composer" },"artist": { "name": "John Doe" } }
];
let obj = {'artist': {}};
arr.forEach(a => {
obj['artist'][a.role.label] = obj['artist'][a.role.label] || [];
obj['artist'][a.role.label][a.order-1] = a.artist.name;
});
console.log(obj);
,
您可以将reduce
方法与object一起用作累加器参数,然后检查键是否不存在,以空数组作为值创建它,然后按顺序添加名称。
const data = [{"order":1,"role":{"label":"singer"},"artist":{"name":"AaRON"}},{"order":1,"role":{"label":"author"},"artist":{"name":"Simon Buret"}},{"order":2,"artist":{"name":"Olivier Coursier"}},"role":{"label":"composer"},"artist":{"name":"John Doe"}}]
const result = data.reduce((r,{
role: { label },artist: { name },order
}) => {
if (name) {
if (!r[label]) r[label] = [];
r[label][order - 1] = name;
}
return r;
},{})
console.log(result)
,
const array = [{"order":1,"artist":{"name":"John Doe"}}];
const result = array
.sort((item1,item2) => item1.order - item2.order)
.reduce((acc,{ role,artist }) => ({
...acc,artist: {
...acc.artist,[role.label]: [
...(acc.artist[role.label] || []),artist.name,],},}),{ artist: {} });
console.log(result);
,
这是使用es5的另一种方法
const data = [{ "order": 1,"artist": { "name": "John Doe" } }];
var result = data.reduce(function(map,obj) {
map["artist"] = map["artist"] || {};
if (obj.role.label === 'author' || obj.role.label === 'singer') {
map["artist"][obj.role.label] = map["artist"][obj.role.label] || [];
map["artist"][obj.role.label][obj.order - 1] = obj.artist.name;
}
return map;
},{});
console.log(result)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。