首页 > 解决方案 > 使用 .filter() 返回布尔值

问题描述

我正在尝试从下面的代码中返回一个布尔值

data = [{name: "Jack", value: "Y", city: "NY"},
        {name: "John", value: "Y", city: "NJ"},
        {name: "John", value: "N", city: "NY"}]

从上面的数据中,我想通过使用基于城市的过滤器返回一个布尔值作为 NY 并且谁的值为“Y”

尝试了以下方法

const trail1 = data.filter(function (item) {
                return Boolean(item.city === "NY" && item.value === "Y");
            });

const trail2 = data.filter(function (item) {
        return (item.city === "NY" && item.value === "Y");                               
    }).length === 1;


const trail3 = data.some(function(item){
  return item === (item.city === "NY" && item.value === "Y");
});

trail1返回满足条件但不返回 true 或 false 的数组对象

trail2根据数据返回真或假。但是想知道是否有更好的方法来代替使用.length

trail3返回 false 总是不确定它出了什么问题。因为它的城市为 NY 并且值 = Y 存在于数据对象

如果 JavaScript 数组包含一个元素 但没有帮助,则返回 true

标签: javascriptarraysarrayobject

解决方案


您正在寻找Array.some()

some() 方法测试数组中的至少一个元素是否通过了提供的函数实现的测试。它返回一个布尔值。

Array.some()测试通过后也会立即停止执行,并且不会总是像Array.filter()会那样迭代所有项目。

注意:如果您希望数组中的所有元素都通过测试,则可以true使用Array.every.

const data = [{"name":"Jack","value":"Y","city":"NY"},{"name":"John","value":"Y","city":"NJ"},{"name":"John","value":"N","city":"NY"}]
        
const result = data.some(item => 
  item.city === "NY" && item.value === "Y"
)

console.log(result)


推荐阅读