varsum=0
for(numinHeizhu){
alert(Heizhu[num])
sum=sum+parseInt(Heizhu[num])//求和
}
alert(sum)
这样写。
首先你的数组定义格式有问题,
newArray[i]//这种构造器是定义长度为i的数组,不能直接初始化
其次你的sum变量没有定义
//for循环,for in方法既可以遍历数组又可以遍历对象的可遍历属性var obj=[{a:1},{a:1},{a:1,b:[{c:1},{c:2},{c:3}]}]
var obj2=[{a:1},{a:1},{a:1},{b:[{c:1},{c:2},{c:3}]}]
var sum=0
var sumArr = function(arr){
for(var i in arr){
if(typeof(arr[i])=='number'){
sum += arr[i]
}else{
sumArr(arr[i])
}
}
}
sumArr(obj2)
console.log(sum)
//如果你理解闭包,上面的代码还可以优化成:
var sumArr = function(){
var sum=0
var countSum = function(arr){
for(var i in arr){
if(typeof(arr[i])=='number'){
sum += arr[i]
}else{
countSum(arr[i])
}
}
return sum
}
return countSum
}()
console.log(sumArr(obj))
//下面的方法虽然不是for循环,但是很简单暴力
//水平有限,正则可能不是很优雅
function getSum(arr){
var sum=0
var str=JSON.stringify(arr) //JSON字符串格式
//提取出':'后面的数字
var strArr=str.match(/:\d/g).map(function(val){
return val.slice(1)
})
//求和
strArr.forEach(function(val){
sum += parseFloat(val)
})
return sum
}
for in在javascript中的具体情况是:
1、解析
for...in 语句对应于一个对象的每个,或一个数组的每个元素,执行一个或多个语句。 for (variable in [object | array])
2、参数
variable,必选项。一个变量,它可以是 object 的任一属性或 array 的任一元素。object, array,可选项。要在其上遍历的对象或数组。
3、说明
在循环的每次迭代前,variable 被赋予 object 的下一个属性或 array 的下一个元素。然后可以在循环内的任一语句中使用它,就好像正在使用 object 的该属性或 array 的该元素一样。
当在一个对象上迭代时,没有办法决定或控制把对象的成员赋给 variable 的次序。在数组内将按元素的次序执行迭代,也就是,0、1、2、......