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
?我迷路了...
您可以使用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)