(1)
我这里有一个混合使用字符串和整数的数组:
var newArr = [ 22, 7, "2761", 16, "91981", "37728", "13909", "247214", "8804", 6, 2 ]
我的最终目标是删除整数值,并添加其他值。
我尝试实现此目的的一种方法是首先将所有内容转换为整数:
for (element in newArr) {
newArr[element] = parseInt(newArr[element], 10);
}
这是最好的方法吗? 它似乎输出了这样的一组int:
var newArr = [ 22, 7, 2761, 16, 91981, 37728, 13909, 247214, 8804, 6, 2 ];
(2)
然后我想只对newArr中超过30的元素求和。 这是我的代码:
var newArr = [ 22, 7, 2761, 16, 91981, 37728, 13909, 247214, 8804, 6, 2 ];
for (element in newArr) {
if (newArr[element] > 30) {
sum += newArr[element];
}
}
它似乎无法正常工作。请帮忙。
(3) 最后一个问题是:
我怎么能在步骤(1)中消除newArr中的int,因为这会否定对其他代码的需求,我猜。
仅使用javascript语法(无jquery)的简单解决方案将不胜感激。 (除非压倒性的共识是jquery会是更好的选择) 谢谢Javascript Ninjas!
答案 0 :(得分:5)
首先,您可能需要查看"resolved" values。这将允许您将它们全部转换为整数。
result = result.filter(function(x) {
return x > 30;
});
然后,您可以使用Array.map删除任何小于或等于30的元素。
sum = result.reduce(function(sum, x) {
return sum + x;
}, 0);
最后,您可以使用Array.filter将它们汇总在一起。
var sum = newArray.map(function(x) {
return parseInt(x, 10);
})
.filter(function(x) {
return x > 30;
})
.reduce(function(sum, x) {
return sum + x;
}, 0);
有很多方法可以实现这一点,但我喜欢这种方法,因为你可以把它连在一起。
SV_POSITION
答案 1 :(得分:0)
检测类型然后删除它们:在这里我浏览数组,然后删除数字然后再次通过它:
var newArr = [22, 7, "2761", 16, "91981", "37728", "13909", "247214", "8804", 6, 2];
for (element in newArr) {
alert(typeof newArr[element] + ":" + newArr[element]);
}
for (var i = newArr.length; i--;) {
if (typeof newArr[i] === "number") {
newArr.splice(i, 1);
}
}
alert(newArr.length);
for (element in newArr) {
alert(typeof newArr[element] + ":" + newArr[element]);
}
答案 2 :(得分:0)
我认为在单次迭代中完成所有这些操作的最佳方法是。
使用Array的Reduce Right: 样品使用:
[0,1,2,3,4] .reduceRight(function(previousValue,currentValue,index,array){ return previousValue + currentValue; });
您可以使用typeof检查previousValue和currentValue,如果parseInt()返回30或更多,则返回添加。