如何用JavaScript或Lodash判断指定字符串是否在含多数组的对象中
判断指定字符串是否存在于含多字符串数组的对象中
JavaScript原生实现
可以通过Object.values()提取对象中所有的数组,再结合Array.some()和Array.includes()快速判断:
const object = { arrayA: ["A1", "A2"], arrayB: ["B1", "B2"] }; function isStringInObject(targetStr, obj) { // 提取对象的所有数组属性值 const allArrays = Object.values(obj); // 检查是否有任意一个数组包含目标字符串 return allArrays.some(arr => arr.includes(targetStr)); } // 测试示例 console.log(isStringInObject("A1", object)); // 输出 true console.log(isStringInObject("B3", object)); // 输出 false
逻辑说明:Object.values()会返回对象所有属性值组成的数组(这里都是字符串数组),some()方法只要检测到有一个数组满足arr.includes(targetStr)的条件,就会立即返回true,无需遍历所有数组,性能更高效。
Lodash工具库实现
Lodash提供了更简洁的API组合,有两种常用方式:
方式一:直接遍历对象属性值检查
const _ = require('lodash'); const object = { arrayA: ["A1", "A2"], arrayB: ["B1", "B2"] }; function isStringInObject(targetStr, obj) { // 遍历对象的每个数组属性,检查是否包含目标字符串 return _.some(obj, arr => _.includes(arr, targetStr)); } // 测试示例 console.log(isStringInObject("A2", object)); // 输出 true console.log(isStringInObject("C1", object)); // 输出 false
方式二:扁平化所有数组后检查
如果需要后续复用合并后的字符串数组,可以先扁平化再判断:
const _ = require('lodash'); const object = { arrayA: ["A1", "A2"], arrayB: ["B1", "B2"] }; function isStringInObject(targetStr, obj) { // 将所有数组合并为一个一维数组 const allStrings = _.flatMap(obj); // 检查目标字符串是否在合并后的数组中 return _.includes(allStrings, targetStr); } // 测试示例 console.log(isStringInObject("B1", object)); // 输出 true console.log(isStringInObject("A3", object)); // 输出 false
内容的提问来源于stack exchange,提问作者LittleMonkey20
相关产品推荐
相关产品推荐

