数组中具有相同起始字符的Javascript组字

时间:2019-05-13 04:21:43

标签: javascript arrays grouping

我目前正在学习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

我该如何实现? 我把它写错了,这个问题看起来像我在问代码,但是我实际上是在寻找一种解决方案(逻辑上)

5 个答案:

答案 0 :(得分:4)

您可以使用Array.reduce

sprintf()

答案 1 :(得分:2)

您可以使用appended函数,但对于所有特殊字符,请使用单个数组。您可以使用默认键为reduce的对象初始化累加器。在reduce回调函数中,检查此累加器是否具有键,该键是迭代中当前元素的第一个字母。如果是这种情况,则将当前值推入special

数组中

key

答案 2 :(得分:1)

在ES6中,Array.reduceObject.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; }