#javascript #jquery #node.js #arrays
#javascript #jquery #node.js #массивы
Вопрос:
У меня есть следующий массив объектов, и я хочу получить из него 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
]
как пользователь с userId 1
двумя лайками, так и пользователь с userId 2
одним лайком и двумя антипатиями.
Чего мне здесь не хватает.
Комментарии:
1. Покажите нам, что вы уже пробовали, и мы исправим вашу работу. Но мы здесь не для написания вашего кода 😉
2. @marks Я обновил свой вопрос своим решением.
Ответ №1:
Вы можете использовать:
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);
Комментарии:
1. Спасибо за ответ, он не создает 2d-массив, кстати
2. @Grammer не могли бы вы, пожалуйста, запустить код и сообщить мне, где он отличается от вашего желаемого результата?
3. да, немного отличается, см. Вопрос, ожидаемые результаты должны быть просто 2d-массивом,
like
иdislike
, поскольку их всего дваuserId
, иuserId 1
они имеют два лайка иuserId 2
имеют 1 лайк и 2 антипатии, я упомянул ожидаемый массив в конце вопроса, еще раз спасибо.4. значение like должно быть равно 1, а значение dislike должно быть равно 0 в возвращаемом / ожидаемом массиве.
5. смотрите Обновленный вопрос, теперь он должен иметь больше смысла