script recorrer objeto mapa crear como javascript arrays object nested converter

javascript - recorrer - Matriz de mapas para objetar con profundidad basada en objetos separados



objeto map (3)

Aquí hay una manera de hacerlo. Funciona para el caso que presentaste.

violín: http://jsfiddle.net/wy0doL5d/8/

var arr = [''adam'', ''smith'', ''honda'', ''civic''] var obj = { first_name : 0, last_name: 1, car : { make: 2, model: 3 } } function mapObj(o, a) { Object.keys(o).forEach(function(key){ var objType = typeof(o[key]); if(objType === "object") { mapObj(o[key], a); } else { o[key] = a[o[key]]; } }); } mapObj(obj, arr);

Tengo una serie de datos (en realidad, un volcado CSV analizado de MySQL con encabezados)

[''adam'', ''smith'', ''honda'', ''civic'']

Tengo un objeto que define cómo esa matriz de datos debe verse como un objeto.

{ first_name : 0, last_name: 1, car : { make: 2, model: 3 } }

Este objeto podría tener cualquier profundidad de valores anidados. También se genera dinámicamente.

Mi pregunta es: ¿cómo echo los valores de la matriz al objeto?

(Estoy tratando de hacer una función recursiva sobre el objeto y agarrar la matriz actualmente, pero sigo corriendo hacia las paredes. Si logro que funcione, lo publicaré, pero sospecho que hay una manera más fácil de lograr esto).


Podrías probar algo como esto:

var myarray = [''adam'', ''smith'', ''honda'', ''civic'']; var myobject = { first_name: 0, last_name: 1, car: { make: 2, model: 3 } }; function objectLoop(obj) { for (var key in obj) { if (obj.hasOwnProperty(key)) { if (typeof obj[key] == ''number'') { obj[key] = myarray[obj[key]]; } else { objectLoop(obj[key]); } } } return obj; } console.log(objectLoop(myobject));

Esta fue una escritura rápida. Es posible que haya algunos casos de uso que no tuve en cuenta, pero sí funciona con los datos anteriores. Se puede expandir definitivamente.

Fiddle: http://jsfiddle.net/qyga4p58/


Una de las posibles soluciones!

var arr =[''adam'', ''smith'', ''honda'', ''civic'']; var obj = { first_name : 0, last_name: 1, car : { make: 2, model: 3 } } function isNumber(n) { return !isNaN(parseFloat(n)) && isFinite(n); } function extract( argObj , argArr){ var o = {}; Object.keys( argObj ).forEach(function( k ){ var curDef = argObj[k]; if(isNumber( curDef ) ){ o[k] = argArr[ curDef ]; return; } o[k] = extract( curDef , argArr); }) return o; } var newO = extract(obj, arr); console.dir( newO ); document.body.innerHTML+= ''<pre>'' + JSON.stringify(newO , null , '' '') + ''</pre>'';