我在下面有Array,并附加了输出。
`var arrayData = ['cat','mat','tac','hiller','mamaer','llerih','eramam'];
输出:[[cat,tac],[mat],[hiller,llerih],[mamaer,erama]];`
想要提取数组中的常用字母并存储在新数组中。
我正在尝试使用array.reducer来实现。
答案 0 :(得分:1)
您可以使用Map和一个简单的循环来完成此操作。想法是您通过根据字符代码和单词长度的总和创建一个“键”来记录每个单词。
使用Array#Reduce对单词字符代码求和。
即:
//sum of each letter's character code using reduce
const res1 = "test".split("").reduce((a,c)=>a+c.charCodeAt(), 0);
const res2 = "ttes".split("").reduce((a,c)=>a+c.charCodeAt(), 0);
const l = "test".length;
const key1 = `${l}_${res1}`;
const key2 = `${l}_${res2}`;
console.log(key1, key2, key1 === key2); //4_448 4_448 true
即(没有reduce和for循环):
function sum(word){
let s = 0;
for(let i = 0; i < word.length; i++){
s += word[i].charCodeAt();
}
return s
}
//sum of each letter's character code using reduce
const res1 = sum("test");
const res2 = sum("ttes");
const l = "test".length;
const key1 = `${l}_${res1}`;
const key2 = `${l}_${res2}`;
console.log(key1, key2, key1 === key2); //4_448 4_448 true
记录单词的长度会增加安全性,以防两个不同长度的单词的总和相同
完整解决方案:
const data = ['cat','mat','tac','hiller','mamaer','llerih','eramam'];
const m = new Map();
for(let i = 0; i < data.length; i++){
const word = data[i];
const sum = word.split("").reduce((a,c)=>a+c.charCodeAt(), 0);
const key = `${word.length}_${sum}`;
m.set(key, [word].concat(m.get(key)||[]));
}
const res = Array.from(m.values());
console.log(res);
答案 1 :(得分:1)