js es6使用数组的every方法遇到的问题

最近在看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方法

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值