搜尋

首頁  >  問答  >  主體

javascript - 在二維數組中找到出現多次的元素

雷雷
phpcn_u1582phpcn_u15822751 天前608

全部回覆(3)我來回復

  • 给我你的怀抱

    给我你的怀抱2017-05-19 10:49:27

    給你一個參考- -

    let arr = new Array(["A", "B"], ["C", "D"], ["E", "F"], ["A", "C"], ["D", "F"], ["E", "A"], ["A", "F"]);
    let result = [],list = {},output_arr = [];

    計算元素出現次數並篩選出符合條件的元素

      for (let [val1, val2] of arr) {
        result.push(val1, val2);
      }
      for (let val of result) {
        list[val] ? list[val] += 1 : list[val] = 1;
        if (list[val] === 3) { //出现3次以上的元素
          output_arr.push(val); //装进数组
        }
      }

    查看結果

      console.log(output_arr);

    回覆
    0
  • 迷茫

    迷茫2017-05-19 10:49:27

    這裡給出ES5的解法,ES5相容性會好一些。

    實作的程式碼如下,裡面已經給出具體的註解:

    var arr = new Array(["A","B"],["C","D"],["E","F"],["A","C"],["D","F"],["E","A"],["A","F"]);
    var output_arr = new Array();
    
    // 处理函数
    function filterWord(arr){
        
        // 先定义一个对象
        var tempObject = {};
    
        // 两层for循环,获得数组的每个元素    
        var arrLength = arr.length;
        for(var i = 0; i < arrLength; i++){
    
            var arrItemLength = arr[i].length;
            for(var j = 0; j < arrItemLength; j++){
                
                // 获得数组的元素
                var temp = arr[i][j];
    
                // 判断是否已经存在于对象中
                if(temp in tempObject){
                    // 如果存在,那么计数加一
                    tempObject[temp]++;
                }else{
                    // 如果不存在,就新创建,并且计数为1
                    tempObject[temp] = 1;
                }
            }
        }
    
        // 将计数大于等于3的加入数组
        var resultArr = [];
        for(var item in tempObject){
            if(tempObject[item] >= 3){
                resultArr.push(item);
            }
        }
        return resultArr;
    }
    
    output_arr = filterWord(arr);
    console.log(output_arr);

    輸出結果:

    ["A", "F"]

    這裡給一點小建議,希望題主熟悉一下JavaScript中的對象,以及遍歷和處理對象的方法。
    在本題中,題主可以測試一下輸出tempObject的結果,其結果如下:

    {
        A: 4
        B: 1
        C: 2
        D: 2
        E: 2
        F: 3
    }

    回覆
    0
  • 天蓬老师

    天蓬老师2017-05-19 10:49:27

    給個ES6的解法:

    let arr = new Array(["A","B"],["C","D"],["E","F"],["A","C"],["D","F"],["E","A"],["A","F"]);
    
    let conatiner = [].concat(...arr).sort();
    let dictionary = [...new Set(conatiner)];
    let retArr = dictionary.filter((val, idx) => (
        (conatiner.lastIndexOf(val) - conatiner.indexOf(val) + 1) >= 3
    ));

    回覆
    0
  • 取消回覆