我想生成一个带有标题/答案数组的词汇表,基于标题首字母插入好的字母。
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
对象以生成词汇表?
谢谢!
答案 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')