我有一个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
确认迭代正确。最终输出只有一个值。
答案 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 }}))