使用标题/答案数组生成词汇表

时间:2018-02-22 08:18:37

标签: javascript

我想生成一个带有标题/答案数组的词汇表,基于标题首字母插入好的字母。

Actulay,我只是一个包含我内容的简单数组,但未在“词汇表”中过滤。

所以,我生成一个字母表:

const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split('');
alphabet.map(letter => <Text>{letter}</Text>

我的标题/答案:

{glossaries.map((glossary, index) =>
  <Text>{glossary.title} / {glossary.answer}</Text>
)}

我第一次使用glossary.title.charAt(0),但我不知道如何用这种结构生成我的数组:

[
  'A': [
    {
      title: 'my title',
      answer: 'Yeah'
    },
    ...
  ],
  'B': [
    ...
  ]
]

任何人都知道我如何能够以良好的字母数组“注入”我的glossary对象以生成词汇表?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以按某些功能对数组元素进行分组。使用lodash的示例:

var messages = [
    {title: 'Abnfbjbf', message: 'message'},
    {title: 'Abnfbjbf22', message: 'message2'},
    {title: 'Bbnfbjbf', message: 'message3'},
    {title: 'Cbnfbjbf', message: 'message4'}
]
var result = _.groupBy(messages, function(x) {return x.title[0]})

其中result将包含仅包含非空字母的地图:

{
    "A": [
        {
            "message": "message",
            "title": "Abnfbjbf"
        },
        {
            "message": "message2",
            "title": "Abnfbjbf22"
        }
    ],
    "B": [
        {
            "message": "message3",
            "title": "Bbnfbjbf"
        }
    ],
    "C": [
        {
            "message": "message4",
            "title": "Cbnfbjbf"
        }
    ]
}

更新,包括所有字母,甚至是空字母,试试这个:

var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split('');
var arr = letters.map(x => ({letter: x, messages: messages.filter(m=>m.title[0] === x)}))
var result = _.mapValues(_.keyBy(arr, 'letter'), 'messages')