遍历数组,将每个项目添加到对象中,然后将其推入Javascript中的数组

时间:2018-08-12 19:02:58

标签: javascript arrays json node.js object

我有一个ID数组,如下所示:

[121, 432, 322]

我希望将其全部以以下格式添加到数组中:(预期输出)

[
    {
        "term": {
            "brand_id": 121
        }
    },
    {
        "term": {
            "brand_id": 432
        }
    },
    {
        "term": {
            "brand_id": 322
        }
    }
]

我能够正确地构造结构并获得几乎预期的结果。但是最终,最后一个值只是对象的所有项目中的值,如下所示:(当前输出)

[
        {
            "term": {
                "brand_id": 322
            }
        },
        {
            "term": {
                "brand_id": 322
            }
        },
        {
            "term": {
                "brand_id": 322
            }
        }
    ]

我的代码如下:

  

ID数组位于名为brands的数组中。

let brands_formated = [];
//I have the array stored in `brands`
let format =  { "term" : {
                      "brand_id": 0 //will be replaced
                     }
              };

brands.forEach(function(brand) {
    //The structure for brand query
    format.term.brand_id = brand;
    //Check if the right brand is format. Outputs as desired.
    console.log(format);                            
    brands_formated.push(format);

});

尽管循环中的console.log确认迭代正确。最终输出只有一个值。

2 个答案:

答案 0 :(得分:8)

您目前只有format的一个变量-您只将一项推入数组,只是对其多次进行了变异,导致数组包含对同一对象的3个引用。 / p>

请在每次迭代中创建format。当将一个数组转换为另一个数组时,.map.forEach更合适:

const input = [121, 432, 322];
console.log(
  input.map(brand_id => ({ term: { brand_id }}))
);

答案 1 :(得分:1)

this回答中解释了您的代码问题。这是我解决相同问题的方法。

const input = [121, 432, 322];
Array.from(input, brand_id => ({ term: { brand_id }}))