javascript - 过滤掉数据库中没有关联产品的对象元素
问题描述
我有一个包含类别列表的对象,我想删除产品表中没有关联产品的单个元素(类别) 。
我将如何遍历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
我的ThisCat
console.log 正确跳过了没有关联产品的类别,但该newCats
对象仍包含所有原始条目。
解决方案
过滤器回调函数需要返回真或假。你可以这样做:
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
});
推荐阅读
- javascript - 从 URL 中获取参数,添加 +1 并插入到现有脚本中
- javascript - 使用角度 8 中的 lodash 过滤大量记录(30k-50k)+ 角度
- python - 单击数据和下一个 URL 的 Scrapy 问题
- javascript - 是否可以从另一个包导入节点包?
- java - Kotlin 检查两个列表是否相同,除了一个具有附加元素的列表?
- django - Django - 在DetailView中过滤字段
- assembly - Dosbox 错误 L2002:段代码中 5 处的修复溢出
- linux - wget 提取文本并保存到文件
- reactjs - 如何在 material-ui-dropzone 中使用 initialFiles
- reactjs - 处理多个复选框 Reactjs 不起作用?