我正在尝试编写一个函数,该函数将查找数组中哪个数字集合加起来为最大值,并将该数字放入新数组中:
var num = ['267453', '345678', '876787'];
var newArray = [];
我实际上在这里不知所措,不知道如何开始解决这个问题。
有人可以帮助我让你从右脚起飞吗?
答案 0 :(得分:3)
var num = ['267453', '345678', '876787'];
var sums =[];
num.forEach(function (el) {
string = el.split(''); //split into individual characters
var sum = 0; //have a storage ready
for (var i = 0; i < string.length; i++) { //iterate through
sum += parseInt(string[i],10); //convert from string to int
}
sums.push( sum);
}
Array.prototype.max = function() {
return Math.max.apply(null, this);
};
alert("Max value is: "+sums.max());
答案 1 :(得分:0)
如果我理解你的问题,你可以很容易地实现这个目标。
var num = ['267453', '345678', '876787'];
var max = -Infinity;
var maxi = 0;
num.forEach(function (el, i) {
var n = el.split('').reduce(function (a, b) {
return parseInt(a,10) + parseInt(b,10);
});
if (n > max) {
max = n;
maxi = i;
}
})
console.log(max); //43
console.log(num[maxi]); //"876787"
关于性能,这会多次调用parseInt
超过严格必要的次数,如果速度有问题,您可能需要先考虑解析并单独求和。
答案 2 :(得分:0)
迭代字符串,将数字和数字相加分成数字
var arrayLength = num.length;
var sums = []
for (var i = 0; i < arrayLength; i++) {
var digitsAsChar = num[i].split("");
var tmpSum=0;
var digitsLength = digitsAsChar.length;
for(var y=0; y<digitsLength;y++){
tmpSum = tmpSum+parseInt(digitsAsChar[y]);
}
sums.push(tmpSum)
}
最后对数组进行排序:
sums.sort():
答案 3 :(得分:0)
这是小提琴:
var num = ['267453', '345678', '876787'];
var newArray = [];
var html = '';
for(var n=0; n<num.length; n++) {
var len = num[n].length;
count = 0;
for(var i=0; i<len; i++) {
count += parseInt(num[n].substring(i,i+1));
//console.log(count);
}
var temp1 = parseInt(num[n]);
newArray.push(count);
}
newArray = newArray.sort();
newArray = newArray.reverse();
var max = newArray[0];