首页 > 解决方案 > 如果数组中任何元素的总和等于给定值,则检查数组

问题描述

[1,2,3,6], 3 = True <== 1+2=3
[1,2,3,6], 9 = True <== 3+6=9
[1,2,3,6], 5 = True <== 2+3=5
[1,2,3,6], 10 = False <== 1+2, 2+3, 3+6, 6+1 not equal to 10
[6,2,3,1], 10 = False <== 6+2, 2+3, 3+1, 1+6 not equal to 10
[6,3,3,1], 6 = True <== 3+3=6


如果给定的总和等于数组中任意两个元素的总和,则首选 JavaScript ,函数需要返回 true;否则函数需要返回false。

标签: javascriptarrays

解决方案


这是一种非常简单的方法,可以检查数组中的两个数字是否等于一个值。请注意,这只允许不同的总和(与自身相加的数字不计算在内)。

function test(n, arr){
   return arr.some((item, i) => arr.slice(i+1).includes(n-item))
}

let arr = [1, 2, 3, 6]

console.log(test(5, arr))   // true 2+3
console.log(test(4, arr))   // true 1+3
console.log(test(12, arr))  // false because 6 + 6 doesn't count
console.log(test(10, arr))  // false no sums

如果数组都是正数,您可以在短路情况下添加一个额外的测试,这与以下情况不一样:

 return arr.some((item, i) => n > item && arr.slice(i+1).includes(n-item))

如果您想允许数字与它们相加,只需对整个数组进行测试:

 return arr.some((item, i) => arr.includes(n-item))

推荐阅读