使用嵌套的Array Javascript迭代Json Object

时间:2017-12-06 22:19:54

标签: javascript arrays json

我需要迭代这个json并将值推送到另一个数组

[
{
    "id": 1,
    "nombre": "Samson",
    "marcaModelo": [
        {
            "id": 6,
            "nombre": "API 6D "
        }
    ]
}
{
    "id": 6,
    "nombre": "Endress + Hauser",
    "marcaModelo": [
        {
            "id": 10,
            "nombre": "Proline t-mass 65F50-AK2AH1RCBBCA"
        },
        {
            "id": 8,
            "nombre": "Cerabar M"
        }
    ]
}
]

我用这个

Object.entries(res).forEach((value, key) => {
      console.log(key, value)
      this.marcas.push({
        'marcaId': res[key].id,
        'marcaNombre': res[key].nombre,
        'modeloId': res[key].marcaModelo[0].id,
        'modeloNombre': res[key].marcaModelo[0].nombre
      })
      console.log(this.marcas)
    })

但只将一个marcaModelo对象推入marcas数组,如果我将marcaModelo [0]替换为marcaModelo [key],我得到一个未定义的。

我需要这样的东西

{
marcaId:6
marcaNombre:"Endress + Hauser"
modeloId:[10, 8]
modeloNombre:[Proline t-mass 65F50-AK2AH1RCBBCA, Cerabar M]
}

2 个答案:

答案 0 :(得分:0)

您需要一个所有marcaModelo个对象的嵌套循环;您可以使用.map()在每个元素上返回函数结果的数组。您似乎也不需要使用Object.entries()。原始对象是一个数组,您可以直接在其上使用.forEach()

res.forEach(value => {
    console.log(value);
    this.marcas.push({
        'marcaId': value.id,
        'marcaNombre': value.nombre,
        'modeloId': value.marcaModelo.map(o => o.id),
        'modeloNombre': value.marcaModelo.map(o => o.nombre)
    });
    console.log(this.marcas);
}

答案 1 :(得分:0)

res.map(({ id, nombre, marcaModelo }) => ({
    marcaId: id,
    marcaNombre: nombre,
    modeloId: marcaModelo.map(m => m.id),
    modeloNombre: marcaModelo.map(m => m.nombre),
}));