Создать объект значений из массива, все из которого равны 1

#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);