首页 > 解决方案 > 基于具有过滤值的对象过滤数据

问题描述

我的应用程序中有一些过滤器。每当我单击搜索时,应根据搜索值过滤数据。我不知道是否有更好的方法可以以更酷的方式或花哨的方式来做我想做的事情。搜索值的存储方式如下:

FORM_VALUES =
   {
     title: '',
     name: 'John',
     Age: 56
    }

如果对象的值为空,''那么我在过滤对象数组时不应该考虑它们。我的对象数组如下所示:

[
 {
   title:'CEO',
   name: 'John',
   Age: 56
 },
 {
   title: null,
   name: 'George',
   Age: 56
 },
]

在这个例子中,它应该返回数组的第一个元素。

我的代码:

data.filter(d => {
     if ((d.title === FORM_VALUES.title || FORM_VALUES.title === '')
        && (d.name === FORM_VALUES.name || FORM_VALUES.name === '')
        && (d.age === FORM_VALUES.age || FORM_VALUES.age === '')) {
           return d;
      }
 });

标签: javascriptarraysjsonobjectecmascript-6

解决方案


FORM_VALUES使用 . 从对象中获取键/值对数组Object.entries()Array.every()为每一对迭代对数组,true如果过滤器的值''(空字符串)或值与当前对象的值匹配,则返回。

const FORM_VALUES = {"title":"","name":"John","Age":56}

const data = [{"title":"CEO","name":"John","Age":56},{"title":null,"name":"George","Age":56}]

const result = data.filter(o =>
  Object.entries(FORM_VALUES)
    .every(([k, v]) => v === '' || o[k] === v)
)

console.log(result)


推荐阅读