ddimonn8080
@ddimonn8080

Как взять данные из массива в JS?

Здравствуйте, есть массив объектов
const myObj = [
{object_id: 2, category_id: 2},
{object_id: 3, category_id: 2},
{object_id: 4, category_id: 1},
{object_id: 4, category_id: 2},
{object_id: 5, category_id: 1},
{object_id: 5, category_id: 2},
{object_id: 12, category_id: 1},
{object_id: 11, category_id: 1},
{object_id: 13, category_id: 1},
{object_id: 10, category_id: 1},
{object_id: 7, category_id: 3},
{object_id: 6, category_id: 3},
{object_id: 8, category_id: 3},
];


Как можно получить что-то типа
const newObj = {
  3: [7, 6, 8],
   ...
}


где
{
  category_id: [object_id, object_id, object_id]
}

Результат может быть как массив так и объект
Спасибо

P.S. Спасибо за комментарии и ответы. Да, я ошибся, это массив объектов а не объект объектов. В вопросе сделал исправления.
  • Вопрос задан
  • 407 просмотров
Решения вопроса 2
dollar
@dollar
Делай добро и бросай его в воду.
Для начала в режиме зануды должен заметить, что это задание, а не вопрос.
Далее, у вас ошибки в понимании синтаксиса JS. Советую перечитать описание JSON, хотя бы в википедии. Например, {7, 6, 8} - так нельзя писать, ибо формат массива, но формально объект, парадокс.

Ну а решение простое, в лоб:
newObj = []; //Новая структура
for(let i=0;i<myObj.length;i++) { //Сканируем исходный массив
	let o = myObj[i]; //Очередной объект
	if (!newObj[o.category_id]) newObj[o.category_id] = [];
	newObj[o.category_id].push(o.object_id);
}

Результат:
5c8f569834087054742669.png
Ответ написан
keslo
@keslo
Во-первых, подразумевается видимо массиво объектов? Потому что в объекте всегда должен быть ключ, которого у вас нет.
const myObj = [
{object_id: 2, category_id: 2},
{object_id: 3, category_id: 2},
{object_id: 4, category_id: 1},
{object_id: 4, category_id: 2},
{object_id: 5, category_id: 1},
{object_id: 5, category_id: 2},
{object_id: 12, category_id: 1},
{object_id: 11, category_id: 1},
{object_id: 13, category_id: 1},
{object_id: 10, category_id: 1},
{object_id: 7, category_id: 3},
{object_id: 6, category_id: 3},
{object_id: 8, category_id: 3},
];


Вообще решение может выглядеть так:
const myArr = [
{object_id: 2, category_id: 2},
{object_id: 3, category_id: 2},
{object_id: 4, category_id: 1},
{object_id: 4, category_id: 2},
{object_id: 5, category_id: 1},
{object_id: 5, category_id: 2},
{object_id: 12, category_id: 1},
{object_id: 11, category_id: 1},
{object_id: 13, category_id: 1},
{object_id: 10, category_id: 1},
{object_id: 7, category_id: 3},
{object_id: 6, category_id: 3},
{object_id: 8, category_id: 3},
];

var filtered = {};

function getObj (arr, cat_id) {
	filtered[cat_id + ''] = [];
	arr.forEach((item, i) => {
		item['category_id'] == cat_id ? filtered[cat_id + ''].push(item['object_id']) : '';
	})
}

getObj(myArr, 1);

console.log(filtered);  // 1: [4,5,12,11,13,10]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы