我目前正在学习javascript,但在尝试弄清楚该问题的处理方式时遇到了问题:
我有一个带有特殊问号的单词数组
wordsArray = [“为什么”,“将要”,“您”,“付款”,“用于”,“ a”,“电话”,“?”];
我正在尝试在数组的同一单独组中将具有相同起始字符的单词分组 输出示例为:
firstArray = ["why", "would"] //<- all start with w
secondArray = ["you"]
thirdArray = ["pay", "phone"]//<- all start with p
fourthArray = ["for"]
fifthArray = ["a"]
finalArray = ["?"]//<- special character like ?, :,.. in the same group
我该如何实现? 我把它写错了,这个问题看起来像我在问代码,但是我实际上是在寻找一种解决方案(逻辑上)
答案 0 :(得分:4)
答案 1 :(得分:2)
您可以使用appended
函数,但对于所有特殊字符,请使用单个数组。您可以使用默认键为reduce
的对象初始化累加器。在reduce回调函数中,检查此累加器是否具有键,该键是迭代中当前元素的第一个字母。如果是这种情况,则将当前值推入special
key
答案 2 :(得分:1)
在ES6中,Array.reduce和Object.values将会是这样:
var isLoading = true;
firebase.auth().onAuthStateChanged(user => {
if (user) {
isLoading = false;
this.props.setUser(user);
}
}, error => {
isLoading = false;
}
}).bind(this);
这个想法是通过采用当前单词let data = ["why", "would", "you", "pay", "for", "a", "phone", "?"];
let result = data.reduce((r,c) => {
r[c[0]] = r[c[0]] ? [...r[c[0]], c] : [c]
return r
}, {})
console.log(Object.values(result))
的第一个字符来创建分组。
答案 3 :(得分:0)
const wordsByLetter = arr.reduce((wordsByLetter,word)=> {if(Array.isArray(wordsByLetter [word.charAt(0)]))wordsByLetter [word.charAt(0)]。push(word); else wordsByLetter [word.charAt(0)] = [word];返回wordsByLetter),{}); const arraysOfWords = Object.values(wordsByLetter);
答案 4 :(得分:0)
使用reduce
:
const arr = ["why", "would", "you", "pay", "for", "a", "phone", "?"];
const res = arr.reduce((acc, [f, ...l]) => {
(acc[f] = acc[f] || []).push(f + l.join(""));
return acc;
}, {});
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }