#javascript
#javascript
Вопрос:
Допустим, у меня есть массив properties = ['foo', 'bar']
.
Я хочу создать и объект, подобный query = {foo:1, bar:1}
В настоящее время я делаю..
const query = {};
for (let property of properties) {
query[property] = 1;
}
Есть ли более простой способ сделать это? Спасибо!
Ответ №1:
Вы можете использовать Object.fromEntries()
в паре с map()
:
const query = Object.fromEntries(properties.map(property => [property, 1]));
Или использовать reduce()
, как предложил @Jamiec, но я не уверен, что эти решения понятнее, чем простой цикл (по крайней мере, они умные: P).
Ответ №2:
Да, с reduce
помощью (но я не уверен, что это проще!):
var properties =['foo', 'bar']
var query = properties.reduce( (acc,prop) => {
acc[prop] = 1;
return acc
},{});
console.log(query);
Ответ №3:
Вы могли бы использовать Object.fromEntries()
метод. Пройдите по массиву, используя Array.prototype.map()
метод, чтобы создать массив пар ключ-значение, и, наконец, используйте Object.fromEntries()
метод для преобразования его в требуемый объект.
const properties = ['foo', 'bar'];
const query = Object.fromEntries(properties.map((x) => [x, 1]));
console.log(query);
Ответ №4:
Только для записей:
Другой подход с reduce
возвратом нового объекта путем распространения объекта из предыдущего цикла.
const
properties = ['foo', 'bar'],
result = properties.reduce((object, key) => ({ ...object, [key]: 1 }), {});
console.log(result);