如何通过另一个对象数组中的数据过滤对象数组?

时间:2020-04-06 17:38:45

标签: javascript typescript

请帮助了解如何实现此目标:

var filterAarray = [
  { id: 1, key: "fruits" },
  { id: 2, key: "fruits" },
  { id: 4, key: "vegetables" },
];

var foodArray = [
  {
    fruits: [
      { id: 1, label: "Apple" },
      { id: 2, label: "Cherry" }
    ],
    vegetables: [
      { id: 4, label: "Cucumber" }
    ]
  },
  {
    fruits: [
      { id: 1, label: "Apple" },
      { id: 2, label: "Cherry" },
      { id: 3, label: "Strawberry" }
    ],
    vegetables: [
      { id: 4, label: "Cucumber" },
      { id: 5, label: "Tomato" }
    ]
  }, {
    fruits: [
      { id: 2, label: "Cherry" },
    ],
    vegetables: [
      { id: 5, label: "Tomato" }
    ]
  }
];

我需要获取对象foodArray的已过滤数组,其中包含来自filterAarray的所有数据。 结果必须是:

[
  {
    fruits: [
      { id: 1, label: "Apple" },
      { id: 2, label: "Cherry" }
    ],
    vegetables: [
      { id: 4, label: "Cucumber" }
    ]
  },
  {
    fruits: [
      { id: 1, label: "Apple" },
      { id: 2, label: "Cherry" },
      { id: 3, label: "Strawberry" }
    ],
    vegetables: [
      { id: 4, label: "Cucumber" },
      { id: 5, label: "Tomato" }
    ]
  }
];

即如果数组“ filterAarray”中存在“ foodArray”的对象,则必须显示

1 个答案:

答案 0 :(得分:0)

这应该有效:

 List result = dao.getServiceParam();
HashMap<Service,List<Parameter>> mapList = new HashMap<Service, List<Parameter>>();   
if(!result.isEmpty()) {             
for (int i=0; i< result.size(); i++) {
    Object[] line = (Object[])result.get(i);        
    if ((BigDecimal) line[0]!=null) {

    }
    }
    }      

一般思路:检查foodArray.filter(obj => filterArray.every(e => !!obj[e.key].find(unit => unit.id === e.id)), ); 中的每个对象。然后检查foodArray是否在数组中找到每个元素

看看:
Array.filter
Array.every
Array.find