Una pregunta algo inclinada que no pude entender.

Me gustaría generar un objeto a partir de dos matrices y darles claves, como esta:

 var A = [1, 2, 3, 4]; var B = [7, 8, 9, 19];

 [ { "x": 1, "y": 7 }, { "x": 2, "y": 8 }, { "x": 3, "y": 9 }, { "x":
     4, "y": 19 } ]

Escribí el siguiente código:

var myData = []; var A = [1, 2, 3, 4]; var B = [7, 8, 9, 19];

A.forEach( function (item, index) {     
myData.push( { x: A[item], y: B[item] });   
});

Pero el resultado fue

[ { "x": 2, "y": 8 }, { "x": 3, "y": 9 }, { "x": 4, "y": 19 }, {} ]

Al poner [item - 1] en la función, funciona como me gustaría, pero no puedo entender por qué, ya que el ejemplo de w3School que vi parece muy sencillo y funciona desde el índice 0:

http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_foreach

Mi ejemplo de Fiddle: https://jsfiddle.net/53p5b3w8/5/

3
user2703642 12 may. 2016 a las 16:27

5 respuestas

La mejor respuesta

Estás cerca, simplemente reemplaza item con index

A.forEach( function (item, index) {   
   myData.push( { x: A[index], y: B[index] });   
});

O simplemente

A.forEach( function (item, index) {   
   myData.push( { x: item, y: B[index] });   
});

Básicamente, cuando dices A [elemento], se necesita values (1,2,3,4) en lugar de index (0,1,2,3).

DEMO

var A = [1, 2, 3, 4]; var B = [7, 8, 9, 19];
var myData = [];
A.forEach( function (item, index) {   
       myData.push( { x: item, y: B[index] });   
});
document.body.innerHTML += JSON.stringify( myData, 0, 4 )
8
gurvinder372 12 may. 2016 a las 13:29

Intente usar index en lugar de item dentro de su ciclo mientras iteraba a través de los valores de su matriz en lugar de los índices que necesitaba hacer referencia:

A.forEach( function (item, index) {     
    myData.push( { x: A[index], y: B[index] });   
});

Ejemplo

var myData = [];
var A = [1, 2, 3, 4];
var B = [7, 8, 9, 19];

A.forEach(function(item, index) {
  myData.push({
    x: A[item - 1],
    y: B[item - 1]
  });
});

console.log(myData);
document.getElementById("demo").innerHTML = JSON.stringify(myData, null, 3);


var myData = [];
var A = [1, 2, 3, 4];
var B = [7, 8, 9, 19];

A.forEach(function(item, index) {
  myData.push({
    x: A[item],
    y: B[item]
  });
});

console.log(myData);
document.getElementById("demo2").innerHTML = JSON.stringify(myData, null, 3);
<p id="demo"></p>
<br>
<p id="demo2"></p>
3
Rion Williams 12 may. 2016 a las 13:35

Solo por mencionar, también puedes usar map si myData solo contendrá las dos matrices combinadas:

var myData = A.map(function(item, index) {
  return { x: item, y: B[index] };
});
3
andlrc 12 may. 2016 a las 13:33

El índice de matriz comenzará desde 0

            A.forEach( function (item, index) {     
                myData.push( { x: A[index], y: B[index] });   
            });

Si está utilizando la matriz A por orden, puede hacerlo sin utilizar esa matriz siguiendo el método

            B.forEach( function (item, index) {     
                myData.push( { x: index+1, y: B[index] });   
            });
1
The Developer 12 may. 2016 a las 13:50

Eso es lo que necesitas:

var c = A.map((item, index) => ({x: A[index], y: B[index}));
3
Hitmands 12 may. 2016 a las 13:31