我面临这个挑战,其中包括:
- 编写一个以字符串数组作为参数的函数
- 然后,按第一个字母对数组中的字符串进行分组
- 返回一个对象,其中包含带有代表第一个字母的键的属性
例如:
应该返回
groupIt(['hola', 'adios', 'chao', 'hemos', 'accion'])
// Should return
{
a: [ "adios", "accion" ]
c: [ "chao" ]
h: [ "hola", "hemos" ]
}
这是我的答案,它返回预期的对象,但没有通过页面中的测试:
function groupIt(arr) {
let groups = {}
let firstChar = arr.map(el=>el[0])
let firstCharFilter = firstChar.filter((el,id)=>{
return firstChar.indexOf(el)===id
})
firstCharFilter.forEach(el=>{
groups[el]=[]
})
firstCharFilter.forEach(char=>{
for(let word of arr) {
if(word[0]==char) {
groups[char].push(word)
}
}
})
return groups
}
const result = groupIt(['hola', 'adios', 'chao', 'hemos', 'accion']);
console.log(result);
我哪里失败了?
这里是测试:https://www.jschallenger.com/javascript-arrays/javascript-group-array-strings-first-letter https://www.jschallenger.com/javascript-arrays/javascript-group-array-strings-first-letter
我运行了你的代码以及 JS Challenger 提供的测试示例。我注意到它们区分大小写。因此,尽管您的代码运行良好,但如果单词以大写开头,则它将无法通过某些情况。附件是我通过所有测试示例的版本。
如果你在firstChar中添加:.toLowerCase,我相信你也会通过。快乐编码;)
P.S 如果下图不起作用,请告诉我,我正在学习如何为 Stack Exchange 做出贡献,谢谢。
const groupIt = (array) => {
let resultObj = {};
for (let i =0; i < array.length; i++) {
let currentWord = array[i];
let firstChar = currentWord[0].toLowerCase();
let innerArr = [];
if (resultObj[firstChar] === undefined) {
innerArr.push(currentWord);
resultObj[firstChar] = innerArr
}else {
resultObj[firstChar].push(currentWord)
}
}
return resultObj
}
console.log(groupIt(['hola', 'adios', 'chao', 'hemos', 'accion']))
console.log(groupIt(['Alf', 'Alice', 'Ben'])) // { a: ['Alf', 'Alice'], b: ['Ben']}
console.log(groupIt(['Ant', 'Bear', 'Bird'])) // { a: ['Ant'], b: ['Bear', 'Bird']}
console.log(groupIt(['Berlin', 'Paris', 'Prague'])) // { b: ['Berlin'], p: ['Paris', 'Prague']}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)