在javascript中嵌套array.some()

时间:2018-03-05 08:05:53

标签: javascript

我想知道Array.some()的嵌套用法。假设任务是确定数组中的三个数字是否与给定值x相加。我尝试了以下方法,但它不起作用:

return myArray.some(function(num1){
    myArray.some(function(num2){
       myArray.some(function(num3){
           return num1 + num2 + num3 === x;
       });
    });
 });

对此的任何见解都会有所帮助,包括上述原因无效的原因。

3 个答案:

答案 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;
    )));