2017-01-26 3 views
-1

Есть ли лучший способ превратить деструктурированный массив в объект в Javascript?Javascript - Уничтожить массив в объекте

Я использую библиотеку API axios, и когда я выполняю несколько запросов сразу, я возвращаю массив с 4-5 API responses. Затем я хочу обернуть их в объект и перейти к другой функции. Может быть, есть один лайнер? Не то чтобы это действительно очень важно, но у меня есть куча всех этих приложений.

const [foo, bar, baz] = [1, 2, 3] 
const obj = { 
    foo, 
    bar, 
    baz 
} 
console.log(obj) 
=> {foo: 1, bar: 2, baz: 3} 
+2

Вы ищете для него без библиотек? С Lodash вы можете делать '_.zipObject (['foo', 'bar', 'baz'], [1, 2, 3])' – loganfsmyth

+0

Не обязательно без библиотек. Думал, что будет родной путь JS, но это все еще довольно круто, спасибо! – inostia

+0

удивительный, который сработал. Еще раз спасибо @loganfsmyth. Если кто-то знает о родной версии JS, мне было бы любопытно увидеть ее – inostia

ответ

-1

На самом деле не существует более короткого способа использования ванили, чем ручное объявление объекта и реквизита. У Lodash есть метод zipObject, который бы это сделал, хотя, например.

_.zipObject(['foo', 'bar', 'baz'], [1, 2, 3]) 
-2

Там нет ничего, встроенные в JavaScript, что делает именно то, что вы хотите, но сделать функцию, которая делает это будет тривиальным. Вот один на основе _.zipObject из Lodash:

function zipObject(props, values) { 
 
    return props.reduce((object, prop, index) => { 
 
    object[prop] = values[index]; 
 
    return object; 
 
    }, {}); 
 
} 
 

 
console.log(zipObject(['foo', 'bar', 'baz'], [1, 2, 3]));

В golfed однострочника:

const zipObject = (ps, vs) => ps.reduce((o,p,i)=>(o[p]=vs[i],o),{}); 
Смежные вопросы