Js 求出数组不包含的范围

大哥大姐们在线求帮请分析下,Js 求出数组不包含的范围
最新回答
上帝的女孩

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里的值
谢谢大神!!!