Javascript:从对象数组创建二维数组



我有以下对象数组,并希望从中获得一个2d数组。到目前为止我尝试过的:

let arr = [
{
"id": '1',
"userId": '1',
"postId": 1,
"type": 'like'
},
{
"id": '2',
"userId": '1',
"postId": 2,
"type": 'like'
},
{
"id": '3',
"userId": '2',
"postId": 3,
"type": 'like'
},
{
"id": '4',
"userId": '2',
"postId": 4,
"type": 'dislike'
},
{
"id": '5',
"userId": '2',
"postId": 1,
"type": 'disklike'
},
];
var newArr = arr.map(function(val, index){          
return [val.type]
})

返回:

[
["like"], ["like"], ["like"], ["dislike"], ["dislike"]
]

哪不是预期结果,预期结果是:

[
["like", "like"], // User 1
["like", "dislike", "dislike"] // User 2
]

因为具有CCD_ 1的用户具有两个喜欢并且具有userId 2的用户具有一个喜欢和两个不喜欢。

我在这里错过了什么。

您可以使用:

const original = [
{
id: '1',
userId: '1',
postId: 1,
type: 'like'
},
{
id: '2',
userId: '1',
postId: 1,
type: 'like'
},
{
id: '3',
userId: '2',
postId: 3,
type: 'like'
}
];
const newArray = original.reduce ((array, item) => {
const index = parseInt(item.userId) - 1;
array[index] = array[index] ?? [];
array[index].push(item.type);
return array;
}, []);
console.log(newArray);

最新更新