JavaScript实现判断选中店铺对象与POST返回的单个/多个取货点数据是否匹配的辅助函数
解决思路与实现代码
我来帮你搞定这个匹配判断的Helper函数!核心思路是先把newArea统一成数组格式——不管接口返回的是单个对象还是数组,我们都能用一套逻辑处理,然后检查其中是否存在和选中店铺areaId一致的项即可。
完整实现函数
const selectedAreaMatch = (selectedArea, newArea) => { // 统一数据格式:单个对象转成数组,数组保持原样 const areasToCheck = Array.isArray(newArea) ? newArea : [newArea]; // 检查是否存在与选中店铺areaId匹配的项 const hasMatchingArea = areasToCheck.some(area => area.areaId === selectedArea.areaId); // 按需求返回:匹配则返回false,不匹配则返回true return !hasMatchingArea; };
代码细节解释
- 统一格式处理:用
Array.isArray(newArea)判断输入类型,如果是单个对象就包装成数组,这样后续遍历逻辑不用区分两种情况,代码更简洁健壮。 - 匹配检查逻辑:使用数组的
some()方法,只要找到一个和选中店铺areaId相同的项,就会立即返回true(表示存在匹配),避免不必要的遍历。 - 返回值适配需求:你的要求是“匹配返回false,不匹配返回true”,所以对
hasMatchingArea取反就能直接得到符合要求的结果。
测试示例验证
用你提供的测试数据来验证函数效果:
const selectedArea = { areaId: "84ed84ad-81e3-49ed-absjsjjjs", name: "New york restaurant", address: { city: "New York", postalCode: "0012231", street: "New jersy" } }; // 测试数组类型的newArea(无匹配项) const newAreaArray = [ { areaId: "84ed84ad-81e3-49ed-absyay6w", name: "Veg retaurant", address: { city: "Calfornia", postalCode: "0018383", street: "Calfornia" } }, { areaId: "84ed84ad-sjsjjs", name: "Indian restaurant", address: { city: "Calfornia", postalCode: "001aas8383", street: "Calfornia" } } ]; console.log(selectedAreaMatch(selectedArea, newAreaArray)); // 输出true(无匹配) // 测试单个对象的newArea(无匹配项) const newAreaSingle = { areaId: "84ed84ad-81e3-49ed-absyay6w", name: "Veg retaurant", address: { city: "Calfornia", postalCode: "0018383", street: "Calfornia" } }; console.log(selectedAreaMatch(selectedArea, newAreaSingle)); // 输出true(无匹配) // 测试存在匹配项的情况 const newAreaWithMatch = [ { areaId: "84ed84ad-81e3-49ed-absjsjjjs", name: "Matching restaurant", address: { city: "New York", postalCode: "0012231", street: "New jersy" } }, { areaId: "other-random-id", name: "Unrelated restaurant", address: { city: "London", postalCode: "SW1A 1AA", street: "Downing Street" } } ]; console.log(selectedAreaMatch(selectedArea, newAreaWithMatch)); // 输出false(存在匹配)
这样不管接口返回的是单个对象还是数组,函数都能正确处理啦!
内容的提问来源于stack exchange,提问作者user12494839
相关产品推荐
相关产品推荐

