如何通过ES6计算两个阵列中的频率

时间:2018-12-01 14:57:24

标签: javascript arrays ecmascript-6

字符串数组中的字符串频率 创建一个函数,您将获得一个字符串集合和一个查询列表。对于每个查询,都有一个字符串。我们需要打印给定字符串在字符串集合中出现的次数。

示例:

  • 输入:

    a[] = [wer, tyu, uio]
    b[] = [wer, wer, tyu, oio, tyu]
    
  • 输出:[2 2 0]

说明: a[0]b[]

中出现了两次

2 个答案:

答案 0 :(得分:0)

function occur (a,b) {
	let count = [];

for (var i = 0; i<= a.length ; i++) {
	for (var j = 0;j<= b.length; j++) {
			if (a[i]==b[j]) { 
				
               return count[i] = count[i]++;
			}
		}
		
}
}
console.log(occur(["aaaa","cc" ,"dd"],["aaaa","dd"]));

答案 1 :(得分:0)

在考虑任何查询之前,应使用某种形式的哈希值仅对字符串集合进行一次迭代。 ES6 Map可以用于此目的。

然后对哈希中的每个条目进行频率计数(用reduce计数)。

一个想法不仅是返回该哈希,而且返回一个查询该哈希并返回相应频率的函数,如果它不在该哈希中,则返回0。

这是它的外观:

// Returns function that can answer queries for the given collection of strings
function freq(strings) {
    const counts = strings.reduce((map, s) => map.set(s, (map.get(s)||0)+1), new Map);
    return s => counts.get(s) || 0;
}

// Sample call. The 3 queries are fed into the function returned by freq
const results = ["wer", "tyu", "uio"].map(freq(["wer", "wer", "tyu", "oio", "tyu"]));

console.log(results);