二维数组中找到出现多次的元素

小兵过河
  • 17
var arr=new Array(["A","B"],["C","D"],["E","F"],["A","C"],["D","F"],["E","A"],["A","F"]);
var output_arr=new Array();
//找出出现过三次及以上的元素,写入到output_arr这个一维数组中
//"A"出现了4次,"F"出现了3次
output_arr = ["A","F"];
回复
阅读 3.2k
3 个回答
✓ 已被采纳

给你个参考- -

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);
TabWeng
  • 142

这里给出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
}
C860
  • 552

给个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
));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏