查找数组中元素出现的次数以及出现最多的元素

190 阅读1分钟

1.查找数组中每一个元素出现的次数

// 方法一:
var names1 = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
var countedNames = names1.reduce(function(allNames, name) {
		if(name in allNames) {
			allNames[name]++;
		} else {
			allNames[name] = 1;
		}
		return allNames;
	}, {});
 console.log(countedNames)  // { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }

// 方法二:
function fn1(arr) {
    let tempObj = {}
    for (let i = 0;i < arr.length; i++) {
        tempObj[arr[i]] ? tempObj[arr[i]]++:tempObj[arr[i]] = 1
    }
    console.log(tempObj)
    return tempObj
}
fn1(names1)

2.查找数组中出现次数最多的一个元素,并输出次数

var names2 = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
function fn(arr) {
    let tempObj = {}
    let newObj = {
        key:null,
        num: 0
    }
    for (let i = 0;i<arr.length;i++) {
        tempObj[arr[i]] ? tempObj[arr[i]]++:tempObj[arr[i]]=1
    }
    for (let key in tempObj) {
        if (tempObj[key] > newObj.num) {
            newObj.key = key
            newObj.num = tempObj[key]
        }
    }
    return newObj
}

 fn(names2) // {"key":"Alice","num":2}

3.第一次出现的下标

var names3 = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];

function fn3(arr) {
    let tempObj = {}
    for(let i = 0;i < arr.length; i++) {
        if (tempObj[arr[i]]) {
            tempObj[arr[i]].num++
        } else {
            tempObj[arr[i]] = {
                num: 1,
                firstIndex: i
            }
        }
    }
   return tempObj
}
fn3(names3) // {"Alice":{"num":2,"firstIndex":0},"Bob":{"num":1,"firstIndex":1},"Tiff":{"num":1,"firstIndex":2},"Bruce":{"num":1,"firstIndex":3}}