Как установить значение для всех элементов внутри массива?
Например, у меня есть массив: ["chin","eng","maths"]
Я хочу установить его на {"chin" :true,"eng":true,"maths":true}
И нажмите на firebase в детстве.
Один из возможных подходов — использовать Массив.уменьшить() следующим образом:
const input = ["chin", "eng", "maths"];
let obj = input.reduce((acc, item) => (acc[item] = true, acc), {});
console.info(obj);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
Или вы можете использовать spreading
, но с небольшими потерями в производительности:
let obj = input.reduce((acc, item) => ({...acc, [item]: true}), {});
Создает ли это новый объект на каждой итерации? Кажется дорогим.
Вероятно, так же дорого, как делать то, что вы уже делаете, не используя reduce
«В случае производительности» - да, когда решение короче, работает лучше и так же читабельно, я думаю, это должен быть основной ответ.
@ Джеймс, да, ты прав, я добавил лучшую версию, не распространяясь.
Самый простой способ — перебрать массив с помощью for...of
и добавить каждый ключ к объекту:
const keys = ["chin", "eng", "maths"],
output = {};
for (const key of keys) {
output[key] = true;
}
console.info(output)
Другой вариант — создать двумерный массив записей пары ключ-значение, используя map
. Затем используйте Object.fromEntries()
для создания объекта
const keys = ["chin","eng","maths"]
const output = Object.fromEntries(keys.map(k => [k, true]))
console.info(output)
Вы имеете в виду изменение
["chin","eng","maths"]
на{"chin" :true,"eng":true,"maths":true}
как структуру? Или как струна? Простой факт изменения[]
на{}
означает другую структуру. ([] = массив, {} = объект)