按属性对列表进行排序,并在JavaScript中的每个第一个字母更改之前添加一个对象

沃索里亚诺

所以我试图做这样的UI:

在此处输入图片说明

我有很多用户

[{name: 'Julia'}, {name: 'Ismeh'}, {name: 'Alison'}, {name: 'Andrea'}, {name: 'Betty'}]

我想做的是按名称属性的第一个字母对数组进行排序,并在每个数组前添加标题对象。例如,在图片中,您可以看到字母A,B,I和J作为标题。

现在,我可以像这样工作:

    let final = []
    // sort by first letter
    const sortedUsers = state.test_list.sort((a, b) => a.name.localeCompare(b.name))
    for (let x = 0; x < sortedUsers.length; x++) {
        const user = sortedUsers[x].name
        if (user.charAt(0) === 'A') {
            const checkIfExists = final.findIndex((f) => f.header === 'A')
            // add the header A if it doesn't exist
            if (checkIfExists < 0) final.push({header: 'A'})
        }
        else if (user.charAt(0) === 'B') {
            const checkIfExists = final.findIndex((f) => f.header === 'B')
            // add the header B if it doesn't exist
            if (checkIfExists < 0) final.push({header: 'B'})
        }
        // else if up to the letter Z
        final.push(user)
    }

如果我记录最终数组,则会得到:

在此处输入图片说明

哪个是对的。

我担心的是代码很长,我不知道它是否可以优化或缩小代码。

还有其他选择可以做这样的事情吗?任何帮助将非常感激。

一定的表现

很简单,请尝试对它们进行排序,然后使用.reduce

const unsortedPeople = [{name: 'Julia'}, {name: 'Ismeh'}, {name: 'Alison'}, {name: 'Andrea'}, {name: 'Betty'}];
const sortedUsers = unsortedPeople.sort((a, b) => a.name.localeCompare(b.name))
const final = sortedUsers.reduce((finalSoFar, user) => {
  const thisUserFirstChar = user.name[0];
  if (finalSoFar.length === 0) addHeader();
  else {
    const lastUserFirstChar = finalSoFar[finalSoFar.length - 1].name[0];
    if (lastUserFirstChar !== thisUserFirstChar) addHeader();
  }
  finalSoFar.push(user);
  return finalSoFar;
  function addHeader() {
    finalSoFar.push({ header: thisUserFirstChar });
  }
}, []);

console.log(final);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

按属性第一个字母对对象数组进行分组

按空白列中的第一个字母发布排序列

在外壳中按第一个字段对文件中的行进行排序,第一个字段被视为数字

如果第一个字符是“+”或“-”,如何按字母顺序对TreeMap进行排序

使每个句子的第一个字母大写,而不用Python更改其余句子

打印一行中每个单词的第一个字母

在javascript中查看数组中每个字符串的第一个字母

按第一个字母过滤列表

从每个单词中删除第一个字母并创建一个列表,但不删除特定停用词的第一个字母

如何按键的第一个字母然后按字典中的值排序

检索字符串的第一个字符并在C ++中按字母顺序进行比较

JavaScript:提取数组中每个字符串的第一个字母?

根据文本文件中的第一个字母对单词进行排序,python

按空格后的第一个字符对TStringList进行排序

如何将列表中每个单词的第一个字母从大写转换为小写?

您如何将列表中每个单词的第一个字母大写?

每次第一个字母更改时,将大写字母添加到有角度的列表中

提取R中每个单词的第一个字母

识别文本框中每个单词的第一个字母

如何将数组中每个名称的第一个字母大写?

获取python中每个2个字母的单词的第一个字母

按第一个列表对列表进行排序

使用charAt遍历数组以获取javascript中每个值的第一个字母

Swift从自定义对象数组的属性中获取第一个字母

PHP在下拉列表中显示数组的第一个字母?

Javascript按字母顺序对对象数组进行排序并放置具有值的第一个对象

在字符串中的第一个字母后添加一个空格 - Swift 5

如何从列表中的每个项目中提取第一个字符并进行操作

在javascript中将字符串中单词的第一个字母更改为大写