var seriesObj = {}
var result = [
    ['a','b'],
    [14, 5, 4, 11, 23, 5, 24, 6, 34, 53, 13, 2]
]
var seriesArr = []
var i
var resultLen = result[1].length
for (i = 0; i < resultLen; i++) {
    seriesObj.meta = 'Count'
    seriesObj.value = result[1][i]
    seriesArr.push(seriesObj)
    console.log(seriesArr)
}


https://jsfiddle.net/sgbxsbz5/2/

我不明白为什么我得到的结果与预期不同。

我预期的最终结果是一个数组,其中包含具有不同值的对象,但是我得到的只是数组中具有重复相同值的对象...?

例如。

0: Object
meta: "Count"
value: 2

1: Object
meta: "Count"
value: 2


但是我希望

0: Object
meta: "Count"
value: 14

1: Object
meta: "Count"
value: 5


这是为什么?

最佳答案

您应该为此使用map

var seriesArr = result[1].map(function(val){
    return { meta: 'Count', value: val };
});


对于为什么您的版本无法正常运行的解释...

当将seriesObj推送到seriesArr时,seriesArr将获得对seriesObj值的引用。变量seriesObj的值是一个对象。该对象的属性可能会更改,但是变量seriesObj的值仍然是该对象。

为了将单独的对象推入数组,变量seriesObj的值需要更改为其他对象。

这可以通过在for循环内简单地创建一个新对象来实现。

 for (i = 0; i < resultLen; i++) {
     seriesObj = {};
     seriesObj.meta = 'Count'
     seriesObj.value = result[1][i]
     seriesArr.push(seriesObj)
     console.log(seriesArr)
 }

09-07 10:41