获取对象数组并按字母顺序排序为较小的数组



我正在尝试转换如下所示的对象数组:

var allApps = [
{
title: "amazon",
summary: "lorem ipsum"
},
{
title: "facebook",
summary: "lorem ipsum"
},
{
title: "twitter",
summary: "lorem ipsum"
},
{
title: "flipp",
summary: "lorem ipsum"
}
]

变成看起来像这样的东西:

var titles= {
A: [
{      
title: "amazon",
summary: "lorem ipsum"
}
],
F: [
{
title: "facebook",
summary: "lorem ipsum"
},
{
title: "flipp",
summary: "lorem ipsum"
}
],
T: [
{
title: "twitter",
summary: "lorem ipsum"
}
]
}

到目前为止,我有这个:

var letters = [];
var titles = [];
for (var i = 0; i < allApps.length; i++) {
title = allApps[i].title;
if (title=="") {
continue;
}
var firstLetter = title.substring(0,1);
var arrayWithFirstLetter = titles[firstLetter];
if (arrayWithFirstLetter == null) {
titles[firstLetter] = [];
letters.push(firstLetter);
};
}

我本质上想根据标题属性对应用程序进行排序,并将它们推送到带有相应字母的数组中。

现在我的代码采用每个标题的第一个字母,并为每个字母创建一个数组数组

怎么样:

var allApps = [
{
title: "amazon",
summary: "lorem ipsum"
},
{
title: "facebook",
summary: "lorem ipsum"
},
{
title: "twitter",
summary: "lorem ipsum"
},
{
title: "flipp",
summary: "lorem ipsum"
}
]
var d = {};
for (var i=0; i<allApps.length; i++) {
var l = allApps[i].title.substring(0,1);
// ensure object has key
if (!d[l]) d[l] = [];
d[l].push(allApps[i]);
}
console.log(d)

此日志:

{
a: [
{ title: 'amazon', summary: 'lorem ipsum' }
],
f:[
{ title: 'facebook', summary: 'lorem ipsum' },
{ title: 'flipp', summary: 'lorem ipsum' }
],
t: [
{ title: 'twitter', summary: 'lorem ipsum' }
]
}

这里的想法是我们只是循环allApps,检查该数组当前成员上 title 属性的第一个字母,然后检查该字母是否已经是我们新字典中的键,d.如果没有,我们将该字母添加为d中的键。然后,我们将allApps中的当前元素添加到该键的值列表中。就是这样!

使用 reduce 函数并从当前对象获取第一个字符。第一个角色将是。如果此键存在,则更新其值

var allApps = [{
title: "amazon",
summary: "lorem ipsum"
},
{
title: "facebook",
summary: "lorem ipsum"
},
{
title: "twitter",
summary: "lorem ipsum"
},
{
title: "flipp",
summary: "lorem ipsum"
}
]
let k = allApps.reduce(function(acc, curr) {
let getFirstChar = curr.title.charAt(0).toUpperCase();
if (acc[getFirstChar] === undefined) {
acc[getFirstChar] = [];
}
acc[getFirstChar].push(curr)
return acc;
}, {})
console.log(k)

你不需要变量letters.你应该推到titles[firstletter].

titles应该初始化为对象,而不是数组。

var allApps = [
{
title: "amazon",
summary: "lorem ipsum"
},
{
title: "facebook",
summary: "lorem ipsum"
},
{
title: "twitter",
summary: "lorem ipsum"
},
{
title: "flipp",
summary: "lorem ipsum"
}
];
var titles = {};
for (var i = 0; i < allApps.length; i++) {
title = allApps[i].title;
if (title == "") {
continue;
}
var firstLetter = title.substring(0, 1).toUpperCase();
if (!titles[firstLetter]) {
titles[firstLetter] = [];
};
titles[firstLetter].push(allApps[i]);
}
console.log(titles);

最新更新