如何解决二维数组循环得到数据一样的问题

var arr=[1,2,3,4,5,6]
var arr2=[0,0.3,2]
var sum =[]
for(var i=0;i<arr.length;i++){
    for(var a=0;a<arr2.length;a++){
        if(arr2[a] <arr[i]){
            sum.push(arr2[a])
             continue;
         }
    }
}

image.png
不用net set。。自己写方法。怎么实现。

阅读 2k
2 个回答
for(var i=0;i<arr.length;i++){
    for(var a=0;a<arr2.length;a++){
        if(arr2[a] <arr[i]){
           sum.indexOf(arr2[a])<0&&sum.push(arr2[a])
             continue;
         }
    }
}

我还是感觉万能 Array.prototype.reduce 可以解决这个问题:

const sum = arr.reduce(
    // a 是从一个 [] 开始
    (a, b) => arr2.reduce(
        // a2 是从最新的 a 开始
        (a2, b2) => 
            // 如果 b2 < b ,且当前结果数组中还没有 b2,那就把 b2 加上,否则直接返回当前的数组
            b2 < b && !a2.includes(b2) ? a2.concat([b2]) : a2,
        a
    ), []
)
// 如果不需要排序,把下面这一行去掉就可以了
.sort();

如果按原题主的方式去写,就是下面这样的:

var arr=[1,2,3,4,5,6]
var arr2=[0,0.3,2]
var sum =[]
for(var i=0;i<arr.length;i++){
    for(var a=0;a<arr2.length;a++){
        // 加一个  && !sum.includes(arr2[a]) 的判断就可以了
        if(arr2[a] <arr[i] && !sum.includes(arr2[a])){
            sum.push(arr2[a])
             continue;
         }
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题