Как заполнить «словарь» javascript, перебирая массив

edit: Ниже приведена упрощенная версия того, что я пытался сделать. Прошу прощения, что показался неполным. Я попытался сделать минимальный воспроизводимый пример, но моих знаний javascript слишком мало, и я подумал, что проблема эквивалентна (тривиальна). У меня есть массив конечных точек choices. Я пытаюсь заполнить словарь data_collection. choices.forEach((choice) => getAllData(choice.value)) куда

function getAllData(datapoint)
{
    d3.json(dataroot + datapoint).then((res) => alldata[datapoint] = res);
}

Я получаю сообщение об ошибке:

Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'Object'

Сейчас я пробую все добрые предложения в комментариях и обновлю, как только сделаю все из них.

Я пытался заполнить «словарь» данных в javascript и проиндексировать его строкой.

Я следовал какому-то простому руководству, но я должен его неправильно понять.

let choices = ["hello", "world", "yeah"]
let data_collection = new Object();

choices.forEach(choice => data_collection[choice] = choice.length);
console.info(data_collection);

Я получаю сообщение об ошибке, что объект сортировки не может быть назначен строкой.

Спасибо заранее! Извиняюсь за вопрос абсолютного новичка.

Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат.

Samuel Liew 08.10.2022 16:20
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
65
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я не знаю, является ли это решением, которое вы ищете, попробуйте.

let choices = ["hello", "world", "yeah"]
let data_collection = new Object();

for (let i of choices) {
    data_collection[choices.indexOf(i)] = i;
}

console.info(data_collection);

отобразит это в консоли:

{0: 'hello', 1: 'world', 2: 'yeah'}

Я решил, что этот вопрос касается словаря Typescript. Когда я пытаюсь включить ваш код в свой файл .TS, VSCode дает красную строку, говорящую: «Элемент неявно имеет тип «любой», потому что выражение типа« число »может нельзя использовать для индексации типа «Объект».

Goodies 07.10.2022 18:40

В Typescript я бы сказал, что правильно объявите свой словарь как карту, например

изменение

 let choices = ["hello", "world", "yeah"]
 let data_collection = new Object();

 choices.forEach(choice => data_collection[choice] = choice.length);
 console.info(data_collection);

в

 let choices = ["hello", "world", "yeah"]
 let data_collection: Map<string,number> = new Map<string,number>();

 choices.forEach(choice => data_collection.set(choice, choice.length);
 console.info(data_collection);

При тестировании второго фрагмента мой вывод консоли webkit для data_collection выглядит следующим образом:

Другие вопросы по теме

React MUI — пользовательские цвета в компоненте оповещения — невозможно прочитать свойства неопределенного (чтение «типа»)
Передать параметр только для чтения в изменяемую функцию (которая не будет изменяться)
Вызов общей функции с соответствующими общими аргументами
Как внедрить TypeScript в существующий проект Create React App без изменения существующего кода или файлов
Кэшировать успешно загруженные данные, сбросить состояние при ошибке, повторить попытку при следующем нажатии
Типовая защита неизвестного вложенного объекта
Сделать парсинг Zod, если он доступен, а если нет, пропустить элемент
Доступ к XMLHttpRequest по адресу «http://localhost:54111/RegisterController» из источника «http://localhost:4200» заблокирован политикой CORS
Пользовательские хуки вызываются бесконечно при использовании с useEffect
Как отключить параметры из матового выбора на основе выбранного параметра?