处理集合_使用every和some方法测试数组

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>使用ForEach方法</title>
    <script src="../unitl/test.js"></script>
    <style>
        #results li.pass {color:green;}
        #results li.fail {color:red;}
    </style>


</head>

<body>
    <ul id="results"></ul>

</body>

<script>


    const ninjas = [
        {name:"Yagyu",weapon:"shuriken"},
        {name:"Yoshi"},
        {name:"Kuma",weapon:"wakizashi"}
    ];

    /**内置的every方法接受回调函数,会对每个元素执行该回调函数。
    如果所有数组元素的回调结果都返回true时,every方法将返回true,否则返回false*/
    const allNinjasAreNamed = ninjas.every(ninja => "name" in ninja);
    const allNinjasAreArmed = ninjas.every(ninja => "weapon" in ninja);


    assert(allNinjasAreNamed, "Every ninja has a name");
    assert(!allNinjasAreArmed,"But not every ninja is armed");


    //内置的some方法接受回调函数作为参数。只要至少有意向的回调结果返回true.否则返回false。
    const someNinjasAreArmed = ninjas.some(ninja.some(ninja=>"weapon" in ninja));
    assert(someNinjasAreArmed,"But some ninjas are armed");

    

</script>
</html>


本例子中引入的js: test.js

在本例中显示了ninja对象集合,但无法确认每个对象的name和weapon属性。想解决这个问题,需要首先利用every方法。
      const allNinjaAreNamed = ninjas.every(ninja=>"name" in ninja);

every方法接收回调函数,对集合中的每个ninja对象检查是否含有name属性。当且仅全部的回调函数都返回true时,every方法才返回true,否则返回false。
有时,我们只关心数组中的部分元素是否满足某些条件。这个,可以使用some方法:

      var someNinjasAreArmed = ninjas.some(ninja=>"weapon" in ninja);

some方法从数组的第1项开始执行回调函数,直到回调函数函数返回true。如果有一项元素执行回调函数时,返回true,some方法返回true,否则some方法返回false。

posted @ 2020-12-03 10:49  yongjar  阅读(107)  评论(0编辑  收藏  举报