JavaScript如何检查数组项name匹配并返回符合条件的配置对象
实现方案
核心校验规则:
- 校验override的
facets数组长度与selected数组长度一致,直接排除包含多余facet的对象 - 校验每个selected的facet都能在override的facets中找到匹配:
name属性完全相等,且selected的value属于对应facet的values数组范围
如果只需要获取第一个匹配的对象,将下方代码的filter方法替换为find即可。
完整实现代码
const selected = [{ name: 'Colour group', value: 'White', }, { name: 'Style', value: 'Cream', }]; const overrides = [{ facets: [{ name: "Colour group", values: ["White"] }] }, { facets: [{ test: 'name', name: "Colour group", values: ["White", "Cream"], }] }, { facets: [{ test: 'name', name: "Colour group", values: ["White", "test"], }] }, { facets: [{ name: "Colour group", values: ["White"] }, { name: "Style", values: ["Cream"] }] }, { facets: [{ name: "Colour group", values: ["White"] }, { name: "Range", values: ["Cream"] }] }]; // 把selected转成Map提高查找效率 const selectedMap = new Map(selected.map(item => [item.name, item.value])) const selectedCount = selected.length const result = overrides.filter(override => { const { facets } = override // 首先校验长度一致,排除多facet的情况 if (facets.length !== selectedCount) return false // 校验所有facet均匹配 return facets.every(facet => { const targetValue = selectedMap.get(facet.name) return targetValue !== undefined && facet.values.includes(targetValue) }) }) console.log(result) /* 输出 [{ facets: [ { name: 'Colour group', values: [ 'White' ] }, { name: 'Style', values: [ 'Cream' ] } ] }] */
内容的提问来源于stack exchange,提问作者MaxwellLynn
相关产品推荐
相关产品推荐

