javascript - 当比较数组为空时跳过比较数组

标签 javascript jquery

我有一个案例,必须将一些数组放在一起进行比较,并找到所有数组之间的共同元素。只要加载了所有数组,以下代码就可以正常工作。但是,如果数组中的一个(甚至 5 个)仍然为空且未加载怎么办?

如果只有两个数组,我可以做类似的事情

  if ((arr1.length > 0) && (arr2.length === 0)) {
     newArr =arr1;
  }

但以这种方式检查所有 6 个数组将是一个很大的条件片段!我该如何解决这个问题,以便代码仅在加载数组时才对数组进行比较,并在数组为空时跳过数组?

let newArr = [];
function common(arr1, arr2, arr3, arr4,arr5,arr6) {
  newArr = arr1.filter(function(e) {
    return arr2.indexOf(e) > -1 && 
           arr3.indexOf(e) > -1 && 
           arr4.indexOf(e) > -1 && 
           arr4.indexOf(e) > -1 && 
           arr5.indexOf(e) > -1 && 
           arr6.indexOf(e) > -1;
  });
}
common( [1, 2, 6, 5, 9,8], 
	[1, 2, 3, 6, 5, 9,8], 
        [6, 5, 4, 5,8], 
        [8, 2, 1, 6, 4], 
        [8, 2, 1, 6, 4], 
        //[8]
        []
        );

$('div').text(newArr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p> Returns Nothing Because 6th Array is Empty</p>
  <div></div>

最佳答案

你做得很辛苦。下面是一个非常简单的方法。您可以按照以下步骤进行操作:

  • 使用 Rest 参数代替 arr1,arr2,...
  • 使用 filter() 移除空数组。像 Array.filter(x => x.length)
  • 创建一个包含 keys 作为数字的对象。并将值(value)作为他们的计数。
  • 对数组的数组使用 forEach()
  • 通过对每个数组应用 forEach() 来增加对象的计数。
  • 最后过滤出那些计数大于给定对象的对象键。

function common(...arrays) {
  let obj = {};
  let temp =  arrays.filter(x => x.length);
  //the below line will check if all the arrays empty
  if(!temp.length) console.log("All empty")
  temp.forEach(arr => {
    arr.forEach(x => {
      obj[x] = obj[x] + 1 || 1
    })
    
  })
  //console.log(temp)
  //console.log(Object.keys(obj))
  return Object.keys(obj).filter(a => obj[a] === temp.length).map(x => +x || x);
}
let newArr = common( [1, 2, 6, 5, 9,8], 
	[1, 2, 3, 6, 5, 9,8], 
        [6, 5, 4, 5,8,1], 
        [8, 2, 1, 6, 4], 
        [8, 2, 1, 6, 4],
        //[8]
        
        );

console.log(newArr)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div></div>

关于javascript - 当比较数组为空时跳过比较数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55666082/

相关文章:

javascript - 如何在滚动时从屏幕顶部添加一个 div 偏移量?

javascript - 删除 underscore.js each() 或其他中的当前对象

javascript - 在 jquery 中上传文件后将当前选项卡设置为事件状态

具有动态生成参数的 Javascript 函数

php - 带有 JSON 和 PHP 的动态行不会输出数据

javascript - 文本和图像高度不匹配

JQuery 可排序和自动滚动

javascript - Blueimp jQuery 文件上传 - 上传完成响应后隐藏队列中的文件

jQuery 多次点击事件

jquery - 阻止用户在页面加载时执行任何操作