Fusionner le tableau des clés et les valeurs dans un objet en Javascript

J'ai:

var keys = [ "height", "width" ]; var values = [ "12px", "24px" ]; 

Et j'aimerais le convertir en cet objet:

 { height: "12px", width: "24px" } 

En Python, il y a l'idiom dict(zip(keys,values)) simple dict(zip(keys,values)) . Existe-t-il quelque chose de similaire dans jQuery ou Javascript simple, ou est-ce que je dois faire ce long chemin?

La fonction JS simple serait:

 function toObject(names, values) { var result = {}; for (var i = 0; i < names.length; i++) result[names[i]] = values[i]; return result; } 

Bien sûr, vous pouvez également implémenter des fonctions telles que le zip, etc., car JS prend en charge les types d'ordre supérieur qui facilitent ces systèmes fonctionnels: D

Utiliser lodash.

_.zipObject

Exemple

 _.zipObject(['a', 'b'], [1, 2]); // ➜ { 'a': 1, 'b': 2 } 
 function combineObject( keys, values) { var obj = {}; if ( keys.length != values.length) return null; for (var index in keys) obj[keys[index]] = values[index]; return obj; }; var your_obj = combine( your_keys, your_values); 

Vous pouvez utiliser une fonction de reduce() pour mapper les paires clé-valeur à un objet.

 /** * Apply to an existing or new object, parallel arrays of key-value pairs. * * @param {string[]} keys - List of keys corresponding to their accociated values. * @param {object[]} vals - List of values corresponding to their accociated keys. * @param {object} [ref={}] - Optional reference to an existing object to apply to. * * @returns {object} - The modified or new object with the new key-value pairs applied. */ function toObject(keys, vals, ref) { return keys.length === vals.length ? keys.reduce(function(obj, key, index) { obj[key] = vals[index]; return obj; }, ref || {}) : null; } var keys = [ "height" , "width" ]; var values = [ "12px" , "24px" ]; document.body.innerHTML = '<pre>' + JSON.stringify(toObject(keys, values), null, 2) + '</pre>'; 

Comme solution alternative, je ne l'ai déjà mentionné:

  var result = {}; keys.forEach((key, idx) => result[key] = values[idx]); 

Dans le projet jQuery-Utils , le module ArrayUtils a une fonction zip mise en œuvre.

 //... zip: function(object, object2, iterator) { var output = []; var iterator = iterator || dummy; $.each(object, function(idx, i){ if (object2[idx]) { output.push([i, object2[idx]]); } }); return output; } //... 

Étrange et moche mais minuscule

Ce n'est pas le … répandez un mais juste pour les coups de pied.

 let arr1 = ['key1', 'key2', 'key3']; let arr2 = ['1', '2', '3']; let obj = (((o,a,b)=>(a.forEach((c,i)=>o[c]=b[i])||o)))({}, arr1, arr2); 

https://jsfiddle.net/x78gy4yu/