如何对比JSON数组返回匹配值?无匹配时能否返回false?
对比多组JSON数组获取公共匹配值的问题解答
初始需求
需要对比多组JSON数组,返回所有数组都包含的公共匹配值。示例:
0 : ['cat1', 'cat2'] 1 : ['cat2', 'cat3'] 2 : ['cat2', 'cat4']
此场景下应返回'cat2',因为它是所有数组的公共元素。
现有代码分析
你找到的这段代码可以实现初始需求:
var result = obj.shift().filter(function(v) { return obj.every(function(a) { return a.indexOf(v) !== -1; }); }); console.log(result);
这段代码逻辑是:取出第一个数组,过滤出其中在剩余所有数组里都存在的元素,最终返回包含所有公共元素的数组。比如初始示例会返回['cat2']。
无公共元素场景的结果
当添加无匹配项的数组(如['cat5'])后,所有数组没有公共元素,此时代码会返回空数组[],而非false。如果需要在无公共元素时返回false,可以在代码末尾增加判断逻辑:
var result = obj.shift().filter(function(v) { return obj.every(function(a) { return a.indexOf(v) !== -1; }); }); // 新增判断,无公共元素时返回false var finalResult = result.length > 0 ? result : false; console.log(finalResult);
内容的提问来源于stack exchange,提问作者user1235285
相关产品推荐
相关产品推荐

