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)
}