【问题标题】:How to filter multiple properties of one array of object from the other array of object?如何从另一个对象数组中过滤一个对象数组的多个属性?
【发布时间】:2020-08-20 14:11:24
【问题描述】:

我正在尝试解决我必须将多个过滤器应用于对象数组的问题。假设我有一个更大的对象数组,其中包含配置属性,它又是一个对象。另一方面,我有小对象,这些对象是用户选择过滤的对象(基于复选框)。我想通过选择多个值来比较与父对象数组制作的对象。

因此,在图像中,用户选择多个值(使用复选框)并基于此过滤主对象数组。因此,在选中复选框后,我得到 childObject 并且我必须在此基础上过滤 parentArray .....请帮助我:

childobject = 
  {'Bathroom': '[2,1]',
  'Bedroom': '[3,2]',
  'halfBathroom':'0',
  'name':'[2BD-2BA,2BD-2BA-1]'}



parentArray = [
0:{},
1:{},
2:{
  'property1':'____',
  'property2':'_____',
  'configuration':'{
   bathroom: 2
  bedroom: 2
  created_at: "2019-03-08 20:52:52"
  created_by: 264
  half_bathroom: 1
  id: 26
  is_selected: 0
  name: "2BD-2BA-1/2BA"
  name_en: "2BD-2BA-1/2BA"
  name_es: "2RE-2BA-1/2BA"
  status: 1
  updated_at: "2019-08-23 05:39:44"
  }'
  }
  3: {},
  4:{}
]

【问题讨论】:

  • 你的 childArray 不是一个正确的数组,它甚至是任何对象(因为双属性名称):
  • 过滤条件是什么?所有这些都必须被填满,或者只有一些。只有具有精确属性值的对象(例如卧室==2)?给我们一个结果,它应该是什么样子。
  • 是的,无论我们选择什么,我们都必须过滤所有这些。我无法编写带有多个过滤器的代码。
  • @Deepak007 您的代码包含错误 childArray && parentArray 不是对象或数组。您是否混合了括号并且想使用 {} 而不是 [] 来包装 childArray && parentArray 的内容?
  • @Deepak007 parentArray 应该看起来像 parentArray = [{}, {}, {}] 吗?

标签: javascript arrays filter


【解决方案1】:

我不得不在某些时候更新数据结构:

  • 您在子级和父级中有不同的键(大写/小写 + 驼峰式/_ 书写)
  • 父项中缺少一些}
  • 删除了整数的子引号。添加了缺少,
  • 更改 cruiteria 中的一些值,以便有结果。
  • 在 0:, 1:, 2:, 3:, 4: 的父删除中获取有效数组。

childArray = {
  'bathroom': [2,1],
  'bedroom': [3,2],
  'half_bathroom':1,
  'name':['2BD-2BA', '2BD-2BA-1/2BA']
};

parentArray = [
 {},
 {},
 {
  'property1':'____',
  'property2':'_____',
  'configuration':{
     bathroom: 2,
     bedroom: 2,
     created_at: "2019-03-08 20:52:52",
     created_by: 264,
     half_bathroom: 1,
     id: 26,
     is_selected: 0,
     name: "2BD-2BA-1/2BA",
     name_en: "2BD-2BA-1/2BA",
     name_es: "2RE-2BA-1/2BA",
     status: 1,
     updated_at: "2019-08-23 05:39:44"
  },
 },
 {},
 {}
]
let res = parentArray.filter(elem => Object.entries(childArray).every(([key,val]) => {
    let conf = elem.configuration;
    
    if (conf===undefined) return false;
    
    if (typeof(val) === 'object') {
        return val.some(crit => crit===conf[key]);
    } else {
        return val===conf[key];
    }
}));

console.log(res);

【讨论】:

    猜你喜欢
    • 2021-05-14
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 2018-10-03
    相关资源
    最近更新 更多