javascript - 如何从另一个多维数组中的对象属性创建一个包含所有首字母的数组?

标签 javascript arrays object filter

我有一个包含对象的数组,每个对象都包含一个名为 name 的属性。

现在我想要第二个数组,其中包含第一个数组中每个名称属性的第一个字母。如果首字母尚不存在,则应将其保存在名为 header 的属性中。

我只想让一个字母出现一次,因为这个脚本旨在用于字母标题列表,每个标题包含一个以相同字母开头的名称列表。

我创建了一个使用内置 JavaScript“filter”方法的函数,它应该检查是否已经存在具有该首字母的值。但由于某种原因,它不起作用。无论我提供什么字母,过滤器总是返回一个空数组。

我一直在努力弄清楚为什么我的脚本没有成功。我非常感谢对此的任何帮助!

var fruit = [{title:"Apple"},{title:"Avocado"},{title:"Banana"},{title:"Cucumber"}];
var sections = [];
function createAlphabetSections(array) {
        for(var i = 0; i < array.length; i++){
            var firstLetter = array[i].title.charAt(0).toUpperCase();
            var section = sections.filter(function (section) { return section.header === firstLetter;});
            if(sections.length === 0){
                sections.push([{header: firstLetter}]);  
            } else if (section.length > 0){
                sections.push([{header: firstLetter}]);
            }
        }
}
createAlphabetSections(fruit);

最佳答案

首先使用 map 从当前数组构建一个新数组。然后过滤掉任何重复项。

var sections = fruit.map(function (item) {
    // Return the first letter of the title property
    return item.title.substring(0, 1);
}).filter(function (value, index, self) {
    // http://stackoverflow.com/a/14438954/1789518
    return self.indexOf(value) === index;
});

关于javascript - 如何从另一个多维数组中的对象属性创建一个包含所有首字母的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33547409/

相关文章:

C - 找出所有不同的数字

javascript - 将 javascript (jQuery) 对象属性返回到默认状态

javascript - 在 JavaScript 中迭代分层对象

javascript - 从javascript中的字符串中提取 float

javascript - 切换单选按钮选项时执行操作

c++ - 用于以快速且内存高效的方式处理大型数据数组的良好 C++ 数组类?

c - 使用指针将字符串数组传递给函数

javascript - JS 对象属性在传递表达式时返回 'NaN'

javascript - HTML5 Canvas 上的图像渐变

javascript - 如何将变量传递给数组JS