构造按字母顺序排列的对象数组
Constructing alphabetized array of objects
我有一个带有name属性的对象数组。。。
var myList = [{
name: 'Apple'
}, {
name: 'Nervousness',
}, {
name: 'Dry'
}, {
name: 'Assign'
}, {
name: 'Date'
}]
从本质上讲,我正在尝试创建一个数组,设置如下:
[{
name: 'A',
items: [{
name: 'Apple'
}, {
name: 'Assign'
}]
}, {
name: 'D',
items: [{
name: 'Date',
}, {
name: 'Dry',
}]
}, {
name: 'N',
items: [{
name: 'Nervousness',
}]
}];
基本上,我的对象数组需要按字母顺序排列,放入一个新对象中,该对象的父关键字/值为"name",并带有相应的字母。
我可以按字母顺序排列如下。。。
myList.sort(function (a, b) {
if (a.name < b.name) return -1;
if (a.name > b.name) return 1;
return 0;
});
然后我可以创建一个第一个字母的数组。。。
var headerLetters = [];
angular.forEach(myList, function (item) {
var firstLetter = item.name.charAt(0);
if (headerLetters.indexOf(firstLetter) === -1) {
headerLetters.push(firstLetter);
}
});
但这就是我被困的地方。。。我可以检查重复的第一个字母,但我该如何迭代我的对象列表,并按字母顺序将它们推送到一个新的对象数组中?
假设您先按字母顺序对它们进行排序,那么您总是可以检查数组中的最新项,看看它是否与当前名称匹配。
var headerLetters = [];
angular.forEach(myList, function(item) {
var firstLetter = item.name[0];
var lastObj = headerLetters[headerLetters.length - 1];
if (!lastObj || lastObj.name !== firstLetter) {
lastObj = {
name: firstLetter,
items: []
};
headerLetters.push(lastObj);
}
lastObj.items.push(item);
});
相关文章:
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 重新排列 JavaScript 数组/对象
- 排列具有相同数据的多个对象(减少冗余)
- 创建一个生成器来迭代对象属性排列
- 按数组顺序排列对象
- 如何随机排列数组中的对象
- 按字母顺序排列 AngularJS 中对象保留键/值关联的选项
- 重新排列 JavaScript 对象
- Javascript 如何创建按顺序排列数字的对象
- 如何排列 jQuery 延迟对象
- 构造按字母顺序排列的对象数组
- 排列$scope内对象的顺序
- 如何基于字段从javascript对象中删除一行并重新排列对象
- JQuery数组重新排列JSON对象
- 使用javascript按属性和特定顺序排列对象
- 按字母顺序排列JavaScript对象中的项
- 脑筋急转弯,如何根据几个规则重新排列js对象并改变它的自定义结构
- Object.assign和对象排列之间的差异
- 如何根据属性筛选和排列对象数组