最近在看js数据结构和算法的书,并且把书里面的案例敲了一遍,在集合这一章里面,在封装集合子集的时候是这样封装的,
isSubsetOf(otherSet) {
if (this.size() > otherSet.size()) { // {1}
return false;
}
let isSubset = true; // {2}
this.values().every(value => { // {3}
if (!otherSet.has(value)) { // {4}
isSubset = false; // {5}
return false;
}
return true; // {6}
});
return isSubset; // {7}
}
在这里用到了数组的every方法,虽然平时用es6里面数组新增的方法比较多,但是every方法还是不常用的,随后我查看了一下mdn文档,文档里面有解释和案例:
every() 方法测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值。
const isBelowThreshold = (currentValue) => currentValue < 60;
const array1 = [1, 30, 39, 29, 10, 13];
console.log(array1.every(isBelowThreshold));
// expected output: true
看了之后我感觉封装子集的方法复杂了,不用再every函数里面做太多操作了,这样就行:
//子集
isSubsetOf(otherSet) {
if(this.size() > otherSet.size()) {
return false
}
let isSubSet = true
isSubSet = this.values().some(item => {
otherSet.has(item)
})
return isSubSet
结果我在测试的时候,发现符合要求的时候居然也返回false
把mdn里面案例复制过来测试,
const array1 = [1, 30, 39, 29, 10, 13]
console.log(
array1.every((item) => {
item < 40;
})
);
发现返回false,最终检查发现如果使用箭头函数,有要是使用大括号就必须加return,
const array1 = [1, 30, 39, 29, 10, 13];
const res1 = array1.every((item) => {
//有大括号,要加return
return item < 40;
});
const res2 = array1.every(
(
item //没有大括号,不需要加return
) => item < 40
);
console.log(res1,res2); // true true
与之对应的还有一个some方法