Javascript - 从特定值以上的数组中的数组/ sum元素中删除元素

时间:2015-07-06 17:40:58

标签: javascript arrays

(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!

3 个答案:

答案 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)

我认为在单次迭代中完成所有这些操作的最佳方法是。

  1. 使用typeof item检查每个元素!=“number”
  2. 使用Array的Reduce Right: 样品使用:

    [0,1,2,3,4] .reduceRight(function(previousValue,currentValue,index,array){    return previousValue + currentValue; });

  3. 您可以使用typeof检查previousValue和currentValue,如果parseInt()返回30或更多,则返回添加。