我想知道Array.some()的嵌套用法。假设任务是确定数组中的三个数字是否与给定值x相加。我尝试了以下方法,但它不起作用:
return myArray.some(function(num1){
myArray.some(function(num2){
myArray.some(function(num3){
return num1 + num2 + num3 === x;
});
});
});
对此的任何见解都会有所帮助,包括上述原因无效的原因。
答案 0 :(得分:2)
您应该返回每个嵌套myArray.some
的响应,否则封闭方法将收到未定义的。
请参阅下面的代码。
var myArray = [1, 3, 7, 21];
var x = 31;
var opt = myArray.some(function(num1) {
return myArray.some(function(num2) {
return myArray.some(function(num3) {
return num1 + num2 + num3 === x;
});
});
});
console.log(opt);

答案 1 :(得分:1)
您不会将内部结果返回到外部回调。
return myArray.some(function(num1) {
return myArray.some(function(num2) {
return myArray.some(function(num3) {
return num1 + num2 + num3 === x;
});
});
});
如果您希望阻止从相同索引添加相同的值,则可以添加一个检查,该检查仅允许不在同一索引处的值。
return myArray.some(function(num1, i) {
return myArray.some(function(num2, j) {
return myArray.some(function(num3, k) {
return i !== j && i !== k && num1 + num2 + num3 === x;
});
});
});
答案 2 :(得分:0)
如果你使用arrow functions
,那么如果只有一个陈述,你可以省略return:
箭头功能可以有一个简洁的身体"或通常的"块 体"
在一个简洁的主体中,只指定了一个表达式,该表达式成为 显性回报值。在块体中,您必须使用显式 退货声明。
所以这应该有效:
myArray.some(num1 =>
myArray.some(num2 =>
myArray.some(num3 =>
num1 + num2 + num3 === x;
)));