如何检查数组的至少一项是不是包含在对象数组中并遍历所有对象(JS)

Posted

技术标签:

【中文标题】如何检查数组的至少一项是不是包含在对象数组中并遍历所有对象(JS)【英文标题】:How to check if at least one item of an array is included in an array of an object and loop through all objects (JS)如何检查数组的至少一项是否包含在对象数组中并遍历所有对象(JS) 【发布时间】:2021-04-28 08:57:15 【问题描述】:

我搜索了这个并发现了类似的问题,但我无法为我的具体案例找到解决方案,所以如果这是重复的,我很抱歉。

我正在尝试为我的网站构建过滤器并遇到了这个问题。我有一个标记对象数组,每个标记对象都有一个标记数组(我将其命名为“类型”)。

当用户选择应显示的标记类型时,它们将添加到“selectedFilters”数组中,该数组包含所有选定的过滤器类型作为字符串。现在我想做的是,我只想显示标记数组,按所选类型过滤。这意味着如果标记对象在其类型数组中至少包含一种选定类型,则应该显示它。

const markers = [

type: ['Paper', 'Plastic']
,

type: ['Burnable', 'Plastic']


type: ['NotBurnable']

.
.
.
]

const selectedFilters = ['Burnable', 'Plastic']

const filteredMarkers = ????

我的想法是使用过滤器和一些方法来检查是否至少有一个过滤器与每个对象中的类型数组匹配,并仅返回通过的对象。我已经到了可以使用硬编码字符串作为过滤器而不是实际的arrat来做到这一点的地步:

const filteredMarkers = this.markers.filter(
          marker => marker.type.some( type => type == 'Plastic') 
        )

如何用实际数组替换硬编码字符串并循环遍历它?感谢任何建议、提示和建议。顺便说一句,这是一个 vue 项目。也许有不同的方式在 vue 中构建过滤器?

【问题讨论】:

【参考方案1】:
const markers = [
    
        type: ['Paper', 'Plastic']
    ,
    
        type: ['Burnable', 'Plastic']
    ,
    
        type: ['NotBurnable']
    
]

const selectedFilters = ['Burnable', 'Plastic']

const filteredMarkers = markers.filter(function(marker, index, arr) 
    return marker.type.some(type => selectedFilters.includes(type));
);

console.log(filteredMarkers);

【讨论】:

【参考方案2】:

您的尝试非常接近。您只需要检查 selectedFilters .includes() 是否是其中一种标记类型。

const markers = [
  
    type: ['Paper', 'Plastic']
  ,
  
    type: ['Burnable', 'Plastic']
  ,
  
    type: ['NotBurnable']
  
]

const selectedFilters = ['Burnable', 'Plastic']

const filteredMarkers = markers.filter(
  marker => marker.type.some(type => selectedFilters.includes(type))
)

console.log(filteredMarkers)

【讨论】:

以上是关于如何检查数组的至少一项是不是包含在对象数组中并遍历所有对象(JS)的主要内容,如果未能解决你的问题,请参考以下文章

检查数组是不是至少包含 PHP 中的一组值

如何检查一个值是不是在数组中并使用复选框进行检查

如何检查包含另一个对象数组的对象数组是不是具有属性

如何判断一个数组里是不是包含一个数

如何检查 JSON 对象数组是不是包含数组中定义的值?

检查数组是不是包含某个对象