Aplatissement et déaplatissement rapides et efficaces des objets JavaScript
Aplatissement et déaplatissement des objets JavaScript imbriqués est une tâche courante dans le développement Web, mais elle peut être gourmand en calcul. Cet article explore des implémentations efficaces pour les opérations d'aplatissement et de déaplatissement.
Aplatissement d'objets
Le code suivant fournit une implémentation d'aplatissement hautement optimisée :
Object.flatten = function(data) { var result = {}; function recurse (cur, prop) { if (Object(cur) !== cur) { result[prop] = cur; } else if (Array.isArray(cur)) { for(var i=0, l=cur.length; i<l; i++) recurse(cur[i], prop ? prop+"."+i : i); if (l == 0) result[prop] = []; } else { var isEmpty = true; for (var p in cur) { isEmpty = false; recurse(cur[p], prop ? prop+"."+p : p); } if (isEmpty && prop) result[prop] = {}; } } recurse(data, ""); return result; }
Objets non aplatis
Pour lors de l'aplatissement, l'implémentation suivante démontre des performances améliorées :
Object.unflatten = function(data) { "use strict"; if (Object(data) !== data || Array.isArray(data)) return data; var regex = /\.?([^.\[\]]+)|\[(\d+)\]/g, resultholder = {}; for (var p in data) { var cur = resultholder, prop = "", m; while (m = regex.exec(p)) { cur = cur[prop] || (cur[prop] = (m[2] ? [] : {})); prop = m[2] || m[1]; } cur[prop] = data[p]; } return resultholder[""] || resultholder; };
Résultats de référence
Ces implémentations améliorent considérablement les performances dans les opérations d'aplatissement et d'aplatissement. Dans Opera 12.16, l'aplatissement est environ deux fois plus rapide (~ 900 ms au lieu de ~ 1 900 ms), tandis que dans Chrome 29, il s'améliore à peu près au même rythme (~ 800 ms au lieu de ~ 1 600 ms).
Attention :
A noter que ces implémentations, axées sur la rapidité, sont sensibles à la pollution des prototypes. Il est donc essentiel d’éviter de les utiliser sur des objets non fiables.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!