处理集合_使用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。