【问题标题】:Return a piece of an array after finding the highest integer in java script?在javascript中找到最大整数后返回一段数组?
【发布时间】:2017-03-14 04:14:26
【问题描述】:

因此,在努力寻找任何给定数量的信用卡号码中的最高和之后,我意识到我自己挖了一个洞。 (目前使用 3 张卡“123-123、234-234 和 345-345”作为测试编号。)写出来后:

var howM = prompt("How many cards?")

var arr = [];

for(var i = 0; i < howM; i++)
arr.push(prompt("Enter a card:"));

console.log(arr)

var sumpre = [];

for(var i = 0; i < howM; i++) {
  var sum = 0;
  var eXt = arr[i];
  eXt = eXt.replace (/-/g, "");
     for (var j = 0; j < eXt.length; j++) {
     sum += parseInt(eXt.substr(j, 1)); 
    }
  sumpre.push(sum);
}
console.log(sumpre);

var highest = sumpre[0];

for (var i=1; i<=sumpre.length; i++){
  if (sumpre[i]>highest){
    highest=sumpre[i];
  }
}

console.log(highest)

然而,这可以找到最高的总和;我需要它在最后以原始形式返回具有最高总和的卡号,但不确定哪种方法最适合返回该卡号,或者我是否应该从头开始重新格式化。

【问题讨论】:

  • 对于当前代码的最小更改,您可以使用highest 来保持数组项的索引具有最高值,而不是保持实际值本身 - 然后您可以检索原始卡通过该指数的价值。 (顺便说一句,eXt.substr(j, 1) 可以简化为 eXt.charAt(j) 或只是 eXt[j]。)
  • 没有仔细看你的code但不应该arr[highest]返回原始卡号吗?
  • 谢谢两位,我会牢记这些回顾

标签: javascript arrays for-loop integer


【解决方案1】:

正如我在评论中提到的,或者如Gerardo's answer 中所示,对当前代码进行最小更改的一种方法是使用highest 来保持数组项的索引具有最高值,而不是保留实际值本身 - 然后您可以通过该索引检索原始卡值。

但为了好玩,这里有另一种方法:

function sumDigitsInString(s) {
  return Array.prototype.reduce.call(s, function(p, c) { return p + (+c || 0); }, 0);
}

function itemWithLargestSum(a) {
  return a.reduce(function(p, c) {
    var sum = sumDigitsInString(c);
    return p[0] > sum ? p : [sum, c];
  }, [0])[1];
}

// given an array of strings:
var input = ["123-123", "234-234", "345-345", "111-111"];
var largest = itemWithLargestSum(input);
console.log(largest);

进一步阅读:

【讨论】:

  • 谢谢@GerardoFurtado。我链接到你的答案,因为它清楚地表明了 OP 需要改变什么,我认为 OP 接受它是正确的。我的回答并没有真正打算足够彻底以成为公认的答案:我想我会展示一些想法来实现问题的不同部分而无需实际解释,让任何好奇的读者自己使用我包含的链接。
【解决方案2】:

您也可以使用 Array 方法执行类似的操作。

var inputCards = ["989-000", "123-999", "456-456"];
var sum = 0,
  sumNumbers = {},
  maxVal = 0;


inputCards.map(function(num) {
  var replaceText = new RegExp(/-/g);
  var number = num.replace(replaceText, "").split("");

  var prevVal = 0;
  sumNumbers[num] = number.reduce((prevVal, currentVal) =>
    parseInt(prevVal, 10) + parseInt(currentVal, 10));
});


console.log(Object.keys(sumNumbers).reduce((maxVal, currentVal) =>
  sumNumbers[maxVal] > sumNumbers[currentVal] ? maxVal : currentVal));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    相关资源
    最近更新 更多