gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:05:47 25 4
gpt4 key购买 nike

我有一个案例,必须将一些数组放在一起进行比较,并找到所有数组之间的共同元素。只要加载了所有数组,以下代码就可以正常工作。但是,如果数组中的一个(甚至 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com