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]);
}
我认为在一次迭代中完成这一切的最好方法是
您可以使用typeof检查previousValue和currentValue,如果parseInt()返回的值为30或更多,则返回加法。我认为在一次迭代中完成这一切的最佳方法是
您可以使用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提供这种替代方法。注意,我向后遍历了数组,以避免长度变化的问题。在较旧的浏览器中,以这种方式遍历数组的速度更快。