【发布时间】:2019-08-13 19:36:53
【问题描述】:
我有一个包含多个数字的数组。我希望函数从数组中返回另一个最多包含 3 个数字的数组,当它们相加时,等于另一个数字。
也可以是 1 或 2 个数字,但第一个数字必须是最大的。
例如:
var array = [1,2,3,4,5,6,7,8,9,10];
var number: 25;
期望的输出:[10,10,5]
或者
var array = [1,2,3,4,5,6,7,8,9,10];
var number: 11;
期望的输出:[10,1]
或者
var array = [1,2,3,4,5,6,7,8,9,10];
var number: 5;
期望的输出:[5]
您可能会看到,我正在构建一个小型 dart 应用程序来计算您的分数。这是我需要展示的最后一部分,无论我投了多少飞镖,哪种飞镖组合都能让你准确地达到 0。
我可以遍历我的数字并将它们放入一个数组中,但只要组合需要在另一个之前有一个较小的数字,它就无法计算。代码如下:
// the numbers to add
var finishingNumbers = [60, 57, 54, 51, 50, 48, 45, 42, 40, 39, 38, 36, 34, 33, 32, 30, 28, 27, 26, 25, 24, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
// The number
var output = 167;
// The variable for the end result
var dartsToFinishArr = [];
// Call my function
checkArray();
function checkArray() {
for (var j = 0; j < finishingNumbers.length; j++) {
var dartsToFinishArrTotal = 0;
if (dartsToFinishArr.length > 0) {
for (n = 0; n < dartsToFinishArr.length; n++) {
dartsToFinishArrTotal += dartsToFinishArr[n];
}
}
if (output <= 180) {
if (finishingNumbers[j] + dartsToFinishArrTotal == +($(".matchContainer .matchPlayerContainer .player.playerTurn .playerScore .value").text()) && dartsToFinishArr.length < 3) {
dartsToFinishArr.push(finishingNumbers[j]);
return;
} else if (finishingNumbers[j] + dartsToFinishArrTotal < output && dartsToFinishArr.length < 3) {
dartsToFinishArr.push(finishingNumbers[j]);
checkArray();
return;
} else if (dartsToFinishArrTotal != output) {
return;
}
}
}
}
这应该给我:
var dartsToFinishArr = [60, 57, 50]
但是没有
【问题讨论】:
-
你尝试过什么(用文字而不是代码)?您是将数组排序为升序还是降序?如果数组已排序,您应该能够通过按顺序(或以相反顺序)循环来做到这一点,以便您首先尝试最大的数字。
标签: javascript jquery arrays sorting