首页 > 解决方案 > 过滤掉数据库中没有关联产品的对象元素

问题描述

我有一个包含类别列表的对象,我想删除产品表中没有关联产品的单个元素(类别) 。

我将如何遍历cats对象,读取catid每个元素的属性,搜索产品表并获取与该catid值匹配的所有产品,然后从没有关联类别的任何产品的原始对象元素中过滤掉?

我正在使用带有knex的nodejs作为中间件来访问MySQL表......但这应该与“如何从对象中过滤某些元素”的问题无关?

const cats = await knex('categories').select('catid', 'catname', 'desc', 'refnum');
const newCats = cats.filter(async (item) => {
   const prods = await knex('products').select('prodid').where({ category: item.catid });
   if (prods.length > 1){
      console.log('ThisCat:', item.catname, ' and LENGTH:', prods.length);
      return d;
   }
});
console.log({ newCats}); //SHOULD have dropped elements with no associated products

我的ThisCatconsole.log 正确跳过了没有关联产品的类别,但该newCats对象仍包含所有原始条目。

标签: javascript

解决方案


过滤器回调函数需要返回真或假。你可以这样做:

const newCats = cats.filter(async (item) => {
const prods = await knex('products').select('prodid').where({ category: item.catid });
if (prods.length > 1){
  console.log('ThisCat:', item.catname, ' and LENGTH:', prods.length);
  return true;
}
return false;
});

或者只使用 if 条件:

const newCats = cats.filter(async (item) => {
const prods = await knex('products').select('prodid').where({ category: item.catid });
return prods.length > 1      
});

推荐阅读