在javascript中嵌套array.some()

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在javascript中嵌套array.some()相关的知识,希望对你有一定的参考价值。

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

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

任何有关这方面的见解都会有所帮助,包括上述原因无效的原因。

答案

你应该返回每个嵌套的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);
另一答案

您不会将内部结果返回到外部回调。

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

如果您使用arrow functions,那么只要一个语句就可以省略return:

箭头功能可以具有“简洁的身体”或通常的“块体”。

在简洁的主体中,只指定了一个表达式,该表达式成为显式返回值。在块体中,必须使用显式返回语句。

所以这应该工作:

myArray.some(num1 =>
  myArray.some(num2 =>
    myArray.some(num3 => 
        num1 + num2 + num3 === x;
    )));

以上是关于在javascript中嵌套array.some()的主要内容,如果未能解决你的问题,请参考以下文章

javascript Array.some和Array.every

写好 JS 条件语句的 5 条守则--摘自前端大学

Typescript - 无法在 Array.some [重复] 中访问“this”

array.some() 方法兼容ie8

Javascript-多个数组是否有一样值

数组的方法 Array.map();Array.every()和Array.some();数组的indexof();