电商商品筛选后如何用concat()合并数量不固定的数组?
解决动态合并数组与优化标签筛选问题
一、动态合并多个子数组
你可以用两种方式处理不确定数量的子数组合并:
方法1:使用apply()展开参数
// 合并所有子数组,自动适配任意长度的listProduct const mergedProducts = Array.prototype.concat.apply([], listProduct);
方法2:ES6扩展运算符(更简洁)
const mergedProducts = [].concat(...listProduct);
这两种写法都会把listProduct里的所有子数组一次性合并成一个新数组,不需要手动指定每一个子数组的索引。
二、优化原筛选逻辑(避免重复商品)
你当前的写法会有一个问题:如果某个商品包含多个选中的标签,它会被多次加入listProduct的不同子数组,合并后会出现重复的商品。建议直接一次筛选出包含任意一个选中标签的商品,效率更高且不会重复:
const lowerCaseTags = tags.map(tag => tag.toLowerCase()); const filteredProducts = products.filter(product => { // 先判断商品是否有tags属性 if (!product.tags) return false; // 检查商品的tags是否包含任意一个选中的标签 return lowerCaseTags.some(tag => product.tags.includes(tag)); });
这样处理后,filteredProducts直接就是你需要的最终结果,不需要再合并多个子数组,逻辑更清晰,性能也更好。
内容的提问来源于stack exchange,提问作者Vin Parker
相关产品推荐
相关产品推荐

