J'ai un objet JavaScript imbriqué complexe avec moi. L'exigence est d'aplatir complètement l'objet ou seulement certains des membres qui le composent.Toute bibliothèque JavaScript standard pour la transformation d'objets JS
var obj = {
a: {
b: {
c: {
d: "Varun"
},
e: "kumar"
}
}
};
L'objet qu'on peut en attendre:
{d: "Varun", e: "kumar"}
Je l'ai écrit d'une simple transformation utilitaire qui accepte la carte accesseur sous la forme { « ABCD »: « d »} et transformer l'objet dans le nouvel objet. Je ne supporte pas les tableaux pour l'instant. En outre, l'utilitaire de transformation peut uniquement réduire un objet complexe en un objet plus simple et non l'inverse (c'est-à-dire construire un nouvel objet membre à partir d'un simple membre).
"use strict";
var ObjectUtil = (function() {
// constructor
var cls = function() {
};
// public static
cls.getValueFromAccessor = function (obj, accessor) {
if (obj == null || accessor == null)
return null;
return accessor.split(".").reduce(function(prev, current, index) {
var reducedObject = prev;
if (index == 1)
reducedObject = obj[prev];
if (reducedObject == null)
return null;
return reducedObject[current];
});
};
cls.transform = function(obj, accessorMap, overlay) {
var result;
if (overlay)
result = obj;
else
result = {};
for (var k in accessorMap) {
result[accessorMap[k]] = cls.getValueFromAccessor(obj, k);
}
return result;
};
return cls;
})();
var obj = {
a: {
b: {
c: {
d: "Varun"
},
e: "kumar"
}
}
};
var accessorMap = {
"a.b.c.d": "d",
"a.b.e": "e"
}
ObjectUtil.getValueFromAccessor(obj, "a.b.c.d");
console.log(ObjectUtil.transform(obj, accessorMap, false));
console.log(ObjectUtil.transform(obj, accessorMap, true));
Existe-t-il un moyen standard de transformer des objets d'une forme à une autre. Toutes les bibliothèques disponibles pour cela?
[Il n'existe pas d'objet JSON] (http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/). Votre problème n'a * rien * à voir avec JSON * du tout *. Et JavaScript n'a pas de bibliothèque standard. –
Oui, je comprends cela. Mon mauvais pour les utiliser de façon interchangeable. –
underscore.js est une bibliothèque largement utilisée pour faire des choses comme ça. Cueillir des propriétés spécifiques, aplanir des collections, mapper/réduire, etc. –