如何将 javascript 字符串数组减少为唯一值但计算重复项的数量?
How do I reduce a javascript string array to unique values but keep count of the number of duplicates?
我有一个包含许多字符串的数组,例如:
["e", "e", "e", "e", "a", "e", "e", "a", "e", "e", "e", "e", "e", "o", "a", "e", "r", "e", "e", "e", "o", "e", "u"]
现在我想减少这个数组,让它只包含唯一的字符串。同时,我想计算重复项的数量并(最好)计算一个百分比,该百分比显示重复项数除以字符串总数。
我在想一个看起来像这样的最终结果:
[
{
letter: "e",
duplicates: 16,
percentage: 0.695652173913043
},
{
letter: "a",
duplicates: 3,
percentage: 0.130434782608696
},
{
letter: "o",
duplicates: 2,
percentage: 0.08695652173913
},
{
letter: "r"
duplicates: 1,
percentage: 0.043478260869565
},
{
letter: "u",
duplicates: 1,
percentage: 0.043478260869565
}
]
我将如何在 JavaScript/ES6 中进行此转换?
这可以通过使用 Array#from, Array#reduce, Map, Array#map, and destructuring 来实现。
reduce 允许重新组合和计算字母及其出现次数。
一旦它们被正确组织,您就可以继续绘制所有结果并计算百分比。
const data = ["e", "e", "e", "e", "a", "e", "e", "a", "e", "e", "e", "e", "e", "o", "a", "e", "r", "e", "e", "e", "o", "e", "u"];
const res = Array
.from(data.reduce((acc, cur) => acc.set(cur, (acc.get(cur)||0) + 1), new Map()))
.map(([letter, duplicates]) => ({letter, duplicates, percentage: duplicates / data.length}));
console.log(res);
let array = ["e", "e", "e", "e", "a", "e", "e", "a", "e", "e", "e", "e", "e", "o", "a", "e", "r", "e", "e", "e", "o", "e", "u"]
let result = [...new Set(array)].map(e =>({letter:e,
duplicates:array.filter(n => n===e).length,
percentage:array.filter(n => n===e).length/array.length}))
console.log(result)
我有一个包含许多字符串的数组,例如:
["e", "e", "e", "e", "a", "e", "e", "a", "e", "e", "e", "e", "e", "o", "a", "e", "r", "e", "e", "e", "o", "e", "u"]
现在我想减少这个数组,让它只包含唯一的字符串。同时,我想计算重复项的数量并(最好)计算一个百分比,该百分比显示重复项数除以字符串总数。
我在想一个看起来像这样的最终结果:
[
{
letter: "e",
duplicates: 16,
percentage: 0.695652173913043
},
{
letter: "a",
duplicates: 3,
percentage: 0.130434782608696
},
{
letter: "o",
duplicates: 2,
percentage: 0.08695652173913
},
{
letter: "r"
duplicates: 1,
percentage: 0.043478260869565
},
{
letter: "u",
duplicates: 1,
percentage: 0.043478260869565
}
]
我将如何在 JavaScript/ES6 中进行此转换?
这可以通过使用 Array#from, Array#reduce, Map, Array#map, and destructuring 来实现。
reduce 允许重新组合和计算字母及其出现次数。 一旦它们被正确组织,您就可以继续绘制所有结果并计算百分比。
const data = ["e", "e", "e", "e", "a", "e", "e", "a", "e", "e", "e", "e", "e", "o", "a", "e", "r", "e", "e", "e", "o", "e", "u"];
const res = Array
.from(data.reduce((acc, cur) => acc.set(cur, (acc.get(cur)||0) + 1), new Map()))
.map(([letter, duplicates]) => ({letter, duplicates, percentage: duplicates / data.length}));
console.log(res);
let array = ["e", "e", "e", "e", "a", "e", "e", "a", "e", "e", "e", "e", "e", "o", "a", "e", "r", "e", "e", "e", "o", "e", "u"]
let result = [...new Set(array)].map(e =>({letter:e,
duplicates:array.filter(n => n===e).length,
percentage:array.filter(n => n===e).length/array.length}))
console.log(result)