#javascript #json #typescript #data-structures #structure
Вопрос:
Я должен манипулировать данными на этом замечательном языке, которым является javascript. До этого мне удавалось самостоятельно достигать того, в чем я нуждался, но там я достиг своих пределов.
Довольно сложно объяснить, как структурированы мои данные, поэтому давайте составим схему. Это то, что у меня есть :
obj: {[key: string]: {name: string, type: string}[]} = { "animals": [ {name: "Louis", type: "dog"}, {name: "John", type: "cat"}, {name: "Jordan", type: "dog"}, ] "cars" : [ {name: "alpha", type: "ferrari"}, {name: "beta", type: "ferrari"}, {name: "charlie", type: "mercedes"}, ] }
Чего я пытаюсь добиться, так это для каждого объекта группировать объект в списке по типу. Это выглядело бы так :
obj: {[key: string]: {[key: string]: {name: string, type: string}[]}} = { "animals": { "dog": [ {name: "Louis", type: "dog"}, {name: "Jordan", type: "dog"}, ], "cat": [ {name: "John", type: "cat"}, ] } "cars" : { "ferrari": [ {name: "alpha", type: "ferrari"}, {name: "beta", type: "ferrari"}, ], "mercedes": [ {name: "charlie", type: "mercedes"}, ] } }
У вас есть какие-нибудь идеи, как этого добиться ?
Комментарии:
1. Извините, вы должны представить свою попытку и объяснить, где вы застряли. «У вас есть какие-либо идеи о том, как сделать то, что я хочу?» не должен быть допустимым вопросом для Stackoverflow. Если вы что-то пробовали (с такими вещами
Object.keys
, как.map()
, и т.д.), Вам следует отредактировать свой вопрос и добавить свой код, чтобы мы могли помочь вам улучшить его.2. @JeremyThille Честно говоря, я понятия не имею, как начать добиваться этого, вот почему я не уточнил это
3. Я знаю, отсюда и мой комментарий. Кто-то ответил и написал весь код для вас, но этого не должно было произойти. Stackoverflow не принимает вопросы «Я понятия не имею, как это сделать, пожалуйста, напишите мой код для меня». Вам повезло, что он не был закрыт 🙂 Если вы понятия не имеете, как что-то сделать, в данном случае манипулировать объектом, вам рекомендуется вместо этого следовать некоторым учебным пособиям. Они повсюду.
4. Это не значит, что я могу потратить много дней на работу над этим, в то время как кто-то, кто является экспертом в структурах данных js, может помочь мне за несколько минут. Я понимаю логику требования «обобщенного вопроса», который может быть полезен для других людей, но здесь довольно сложно объяснить что-то, что является очень частным случаем на языке, которым я едва владею. ТАК что это также платформа для помощи людям, и некоторые люди должны помнить об этом … 🙂
5. Я понимаю вашу точку зрения, но я не устанавливал правила Stackoverflow. Кроме того, «Эксперт может сделать это всего за несколько минут», да, именно поэтому их называют аксертами, и как они обычно зарабатывают на жизнь: они не пишут код и разрабатывают вещи бесплатно. Они потратили годы на то, чтобы научиться делать за считанные минуты то, что вы не можете сделать или для чего вам нужны дни, и поэтому написание полного кода с нуля не должно быть бесплатным. Но да, я знаю, приятно помогать людям бесплатно, я понимаю это.
Ответ №1:
Я думаю, что вы ищете следующее (учитывая, что в названии вашего вопроса есть машинописный текст):
interface Value { name: string; type: string; } type Categorized = { [index: string]: Recordlt;string, Value[]gt;; }; const results = Object.entries(obj).reducelt;Categorizedgt;((mapping, [key, values]) =gt; { const group: Recordlt;string, Value[]gt; = {}; for (const value of values) { if (group[value.type] === undefined) { group[value.type] = [value]; } else { group[value.type].push(value); } } return { ...mapping, [key]: group, }; }, {});
Комментарии:
1. Работает отлично, спасибо !
2.Я бы рекомендовал прочитать документацию по часто используемым функциям
.entries
, таким как.reduce
.map
, и т.д.3. да, я сделаю это перед внедрением вашего кода