从此数组中获取过滤后的数组(具有相同首字母的值)

Yoë*_*bib 2 javascript arrays object

我需要创建一个函数indexWords(),该函数接受一个数组作为参数,并返回一个以单词的第一个字母为键的对象,每个键都列出了以该字母开头的所有单词。

这是一个例子,因为我的英语真的很糟糕,哈哈:

indexWords(["apple", "car", "cat"]) // output:  {a: ["apple"], c: ["car", "cat"]}
Run Code Online (Sandbox Code Playgroud)

所以我开始得到一个带有第一个字母的数组,并通过这样做删除重复的字母:

indexWords(arr) {    
let firstLetters = [... new Set(arr.map(x => x[0]))]

}
Run Code Online (Sandbox Code Playgroud)

但是然后我需要过滤给定arr并为每个具有相同首字母的值创建一个新的映射数组。基本上我应该检查if arr[i][0] === firstLetters[0],然后firstLetters[1]等等。但是如何知道将进入多少索引firstLetters ?我迷路了...

Der*_*ang 6

您可以使用Array.reduce如下方式构建数组。

function indexWords(input) {
  return input.reduce((acc, cur) => {
    acc[cur[0]] ? acc[cur[0]].push(cur) : acc[cur[0]] = [ cur ];
    return acc;
  }, {});
}

console.log(indexWords(["apple", "car", "cat"]));
Run Code Online (Sandbox Code Playgroud)