Estoy luchando para crear una matriz de objetos a partir de dos grupos de entrada, cada grupo tiene 3 entradas con lado de datos = izquierda/derecha, cada entrada tiene clase "olmo" y pos de datos = a/b/c
<input class="elm-left elm" name="l1" data-pos="a" data-side="left"/> <input class="elm-left elm" name="l2" data-pos="b" data-side="left"/> <input class="elm-left elm" name="l3" data-pos="c" data-side="left"/> <input class="elm-right elm" name="r1" data-pos="a" data-side="right"/> <input class="elm-right elm" name="r2" data-pos="b" data-side="right"/> <input class="elm-right elm" name="r3" data-pos="c" data-side="right"/>salida deseada es:
[ { "name":"title1", "data":[ { "left" :{"A":10,"B":10,"C":10}, "right":{"A":20,"B":20,"C":20} } ] } ]mi salida es:
...,"data":[ { "left":{"A":20,"B":20,"C":20}, "right":{"A":20,"B":20,"C":20} } ] var sides = {}; var info = {}; $(".elm").each(function () { var pos = $(this).data('pos').toUpperCase(); //a,b,c var side = $(this).data('side'); //left, right var val = $(this).val(); info[[pos]] = val; sides[side] = info; }); data.push(sides);Debe inicializar un nuevo objeto para info[side] antes de poder usar info[side][pos]
info[side] = info[side] || {}este es un patrón común para usar el valor existente si hay uno o crear uno nuevo si es necesario.
Luego puede usar este objeto directamente sin la necesidad de la variable de info que se estaba reutilizando para diferentes conjuntos de valores.
var sides = {}; $(".elm").each(function () { var pos = $(this).data('pos').toUpperCase(); //a,b,c var side = $(this).data('side'); //left, right var val = $(this).val(); sides[side] = sides[side] || {}; sides[side][pos] = val; }); var output = { name: "title1", data: [] }; output.data.push(sides); console.log(JSON.stringify(output)) <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input class="elm-left elm" name="l1" data-pos="a" data-side="left" value="20"/> <input class="elm-left elm" name="l2" data-pos="b" data-side="left" value="20"/> <input class="elm-left elm" name="l3" data-pos="c" data-side="left" value="20"/> <input class="elm-right elm" name="r1" data-pos="a" data-side="right" value="20"/> <input class="elm-right elm" name="r2" data-pos="b" data-side="right" value="20"/> <input class="elm-right elm" name="r3" data-pos="c" data-side="right" value="20"/>