2024-05-02 01:22:40
var arr1=[1,2,3,4],
arr2=[2,3,4,5,6],
arr3=[7,8,9,10],
arr4=[99,100];
var arr0=arr1.concat(arr2,arr3,arr4);
var min=arr0[0],max=arr0[0];
for(i in arr0){
if(min>arr0[i])min=arr0[i];
if(max<arr0[i])max=arr0[i];
}
if(!Array.indexOf){
Array.prototype.indexOf=function(o){
var k=this.length;
while(k--){
if(this[k]==o){
return k;
}
}
return -1;
}
}
var arr=[];
for(var i=min;i<=max;i++){
if(arr0.indexOf(i)==-1)arr.push(i);
}
alert(arr);
2024-05-02 00:17:35
既然使用了 let 关键字,那么至少已经是 ES6 了,以下方法不考虑更低版本的兼容性问题:
let arr5 = arr1
.concat(arr2)
.concat(arr3)
.concat(arr4)
.sort((a, b) => a - b);
let result = Array.apply(null, Array(+arr5[arr5.length - 1]))
.map((n, i) => i)
.filter(n => n > arr5[0] && arr5.indexOf(n) < 0);
console.log(result);
稍微解释一下思路:
1、合并四个数组并按从小到大排序,得到 A5;
2、初始化一个新的数组 R,长度是 A5 中元素的最大值,并赋初值为元素的索引,得到 [0, 1, 2, 3, 4, 5, ...., 99] 这样的数组(想一想,为什么没有 100?);
3、将 R 中所有比 A5 中元素最小值还大、且不在 A5 中的元素取出,即为结果。
因为要在filter中根据下标去取A5里的值
谢谢大神!!!