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; } //...
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);