Javascript-从数组中移除元素/数组中超过某个值的元素总和

Javascript-从数组中移除元素/数组中超过某个值的元素总和,javascript,arrays,Javascript,Arrays,(一) 我这里有一个数组,它是字符串和整数的混合体: var newArr = [ 22, 7, "2761", 16, "91981", "37728", "13909", "247214", "8804", 6, 2 ] 我的最终目标是删除int值,然后添加其他值 我尝试实现这一点的一种方法是首先将所有内容转换为整数: for (element in newArr) { newArr[element] = parseInt(newArr[element], 10); }

(一)

我这里有一个数组,它是字符串和整数的混合体:

var newArr = [ 22, 7, "2761", 16, "91981", "37728", "13909", "247214", "8804", 6, 2 ]
我的最终目标是删除int值,然后添加其他值

我尝试实现这一点的一种方法是首先将所有内容转换为整数:

  for (element in newArr) {
    newArr[element] = parseInt(newArr[element], 10);
  }
这是最好的方法吗? 它似乎输出一个int数组,如下所示:

var newArr = [ 22, 7, 2761, 16, 91981, 37728, 13909, 247214, 8804, 6, 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];
    }
  }
它似乎不起作用。请帮忙

(三) 最后一个问题是:

我怎么能在步骤(1)中消除newArr中的int,因为我想这会消除对其他代码的需求

一个只使用javascript语法(无jquery)的简单解决方案将不胜感激。 (除非绝大多数人一致认为jquery是更好的选择)
谢谢忍者

首先,您可能需要调查。这将允许您将它们全部转换为整数

var result = newArr.map(function(x) {
  return parseInt(x, 10);
});
然后可以使用删除小于或等于30的任何图元

result = result.filter(function(x) {
  return x > 30;
});
最后,您可以使用将它们相加

sum = result.reduce(function(sum, x) {
  return sum + x;
}, 0);
var sum = newArray.map(function(x) {
      return parseInt(x, 10);
    })
    .filter(function(x) {
      return x > 30;
    })
    .reduce(function(sum, x) {
      return sum + x;
    }, 0);
有很多方法可以实现这一点,但我喜欢这种方法,因为你可以把它链接在一起

sum = result.reduce(function(sum, x) {
  return sum + x;
}, 0);
var sum = newArray.map(function(x) {
      return parseInt(x, 10);
    })
    .filter(function(x) {
      return x > 30;
    })
    .reduce(function(sum, x) {
      return sum + x;
    }, 0);

首先,你可能想调查一下。这将允许您将它们全部转换为整数

var result = newArr.map(function(x) {
  return parseInt(x, 10);
});
然后可以使用删除小于或等于30的任何图元

result = result.filter(function(x) {
  return x > 30;
});
最后,您可以使用将它们相加

sum = result.reduce(function(sum, x) {
  return sum + x;
}, 0);
var sum = newArray.map(function(x) {
      return parseInt(x, 10);
    })
    .filter(function(x) {
      return x > 30;
    })
    .reduce(function(sum, x) {
      return sum + x;
    }, 0);
有很多方法可以实现这一点,但我喜欢这种方法,因为你可以把它链接在一起

sum = result.reduce(function(sum, x) {
  return sum + x;
}, 0);
var sum = newArray.map(function(x) {
      return parseInt(x, 10);
    })
    .filter(function(x) {
      return x > 30;
    })
    .reduce(function(sum, x) {
      return sum + x;
    }, 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]);
}

检测类型,然后删除它们:在这里,我遍历数组,然后删除数字,然后再次遍历:

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

我认为在一次迭代中完成这一切的最好方法是

  • 使用项目类型检查每个元素=“数字”
  • 使用数组的Reduce Right: 样本使用:

    [0,1,2,3,4]。reduceRight(函数(previousValue、currentValue、索引、数组){ 返回上一个值+当前值; });


  • 您可以使用typeof检查previousValue和currentValue,如果parseInt()返回的值为30或更多,则返回加法。

    我认为在一次迭代中完成这一切的最佳方法是

  • 使用项目类型检查每个元素=“数字”
  • 使用数组的Reduce Right: 样本使用:

    [0,1,2,3,4]。reduceRight(函数(previousValue、currentValue、索引、数组){ 返回上一个值+当前值; });


  • 您可以使用typeof检查previousValue和currentValue,如果parseInt()返回的值为30或更多,则返回加法。

    这似乎过于复杂,您实际想要实现什么?因为,老实说,如果这不是一个“.”的话,我会很惊讶,你想了解数组方法.reduce(),.includes(),.map()以及Javascript的typeof。你不应该花超过几分钟的时间去弄清楚,祝你好运!这看起来太复杂了,你到底想实现什么?因为,老实说,如果这不是一个“.”的话,我会很惊讶,你想了解数组方法.reduce(),.includes(),.map()以及Javascript的typeof。你不应该花超过几分钟的时间去弄清楚,祝你好运
    varres=newArr.map(Number).reduce(函数(s,n){返回n>30?n+s:s;},0)@LyeFish我喜欢这样。唯一的问题是它不能保证解析以10为基数的数字。示例:
    newnumber('0x88')==136
    假设他们不需要十六进制计算,这一点非常好。另一种方法是
    var res=newArr.map(parseFloat)…
    。这也可以处理小数。唯一的问题是如果列表中存在字符串
    “Infinity”
    ,则
    parseFloat
    将解析为
    Infinity
    var res=newArr.map(Number).reduce(函数(s,n){return n>30?n+s:s;},0)@LyeFish我喜欢这样。唯一的问题是它不能保证解析以10为基数的数字。示例:
    newnumber('0x88')==136
    假设他们不需要十六进制计算,这一点非常好。另一种方法是
    var res=newArr.map(parseFloat)…
    。这也可以处理小数。唯一的问题是列表中是否存在字符串
    “Infinity”
    ,该字符串
    parseFloat
    将解析为
    Infinity
    。感谢Mark提供此选项。请注意,我向后查看了数组以避免长度变化的问题。在较旧的浏览器中,以这种方式遍历数组的速度更快。感谢Mark提供这种替代方法。注意,我向后遍历了数组,以避免长度变化的问题。在较旧的浏览器中,以这种方式遍历数组的速度更快。