聊一下Array.every()跟Array.some()的区别

1,622 阅读2分钟

我的位置:ljn1998codeing.love

今天搞项目时遇到一个问题,因为后端接口没做接口搜索处理,所以需要我们前端自己筛选,再使用every跟some方法时搞混了,再次记录一下。

Array.every()与Array.some()的区别

  • every()

    检测数组中所有元素是否符合指定条件,符合返回true,否则false

  • some()

    检测数组中所有元素是否满足制定条件,满足返回true,否则false

every()

该方法根据指定条件检测数组中所有元素。如果监测到有一个元素不满足,则返回false,且剩余元素不会再次检测。如果所有条件都满足则返回true

一假即假 ,而且只要有一个元素是假,其后面的元素将不再遍历

⚠️注意:every()不对空数组进行检测、every()不改变原数组。

let searchCondition = {
    a: 1,
    b: 1,
    c: 1
}
let arr = [
    {
        a: 1,
        b: 1,
        c: 1
    },
    {
        a: 1,
        b: 2,
        c: 2
    }
]
let filterArr = arr.filter(item => Object.keys(searchCondition).every(key => item[key] === searchCondition[key]))

console.log(filterArr) // [{a: 1, b: 1, c: 1}]

some()

该方法依次检测数组中每个元素。如果有一个元素满足条件,则返回true,剩余的元素不会再执行检测。如果没有满足条件的元素,则返回false

一真即真

⚠️注意:some()不对空数组进行检测、some()不改变原数组。

let searchCondition = {
    a: 1,
    b: 1,
    c: 1
}
let arr = [
    {
        a: 1,
        b: 1,
        c: 1
    },
    {
        a: 1,
        b: 2,
        c: 2
    }
]
let filterArr = arr.filter(item => Object.keys(searchCondition).some(key => item[key] === searchCondition[key]))

console.log(filterArr) // [{a: 1, b: 1, c: 1},{a: 1, b: 2, c: 2}]

我产生的错误

我做的是一个多条件筛选的功能,有可能是一个条件也可能多个条件,所以用every()方法进行筛选时,因为部分条件不存在,所以every()返回为false

所以我对空的条件进行了判断并且delete掉空的条件,放上当时的代码

let filters = {
    departId: this.form.belongDepartment,
    sensorId: this.form.sensorId,
    sensorName: this.form.sensorName,
    useLevel: this.form.useLevel,
    sensorType: this.form.sensorType,
};
if (!this.form.belongDepartment) delete filters.departId;
if (!this.form.sensorId) delete filters.sensorId;
if (!this.form.sensorName) delete filters.sensorName;
if (!this.form.useLevel) delete filters.useLevel;
if (!this.form.sensorType) delete filters.sensorType;
let filterList = this.allTableData.filter((item) =>
    Object.keys(filters).every((k) => {
      return item[k] == filters[k];
    })
);