use*_*695 5 javascript arrays sorting
更新的示例,因为它与帖子中给出的对象结构不匹配
有一个数组,有多个这样的对象:
{
text: text,
elements: [
{
id: id,
page: pageNumber
}
]
}
Run Code Online (Sandbox Code Playgroud)
现在我需要以两种方式对内容进行排序:
text字段对所有数组元素进行排序我想这样做:
array.sort(function(a,b) {
if (a.text < b.text) return -1;
if (a.text > b.text) return 1;
return 0;
});
Run Code Online (Sandbox Code Playgroud)
elements-array 的内容也应按page-field 排序.我不知道如何对一个嵌套在对象中的数组进行排序......不幸的是,由于元素是字符串,它会变得更加困难,但代表了一些页码.所以,我怎么能以正确的方式将这些数据进行排序,为元素可能看起来123还是23-34?在这种情况下123-125,23-34最后一个元素应该是第一个.
例
[
{
text: 'Some text',
elements: [
{ id: 1, pages: '45-67' },
{ id: 2, pages: '12-34' }
]
},
{
text: 'Another text',
elements: [
{ id: 3, pages: '12-34' }
]
}
]
Run Code Online (Sandbox Code Playgroud)
应分类到:
[
{
text: 'Another text',
elements: [
{ id: 3, pages: '12-34' }
]
},
{
text: 'Some text',
elements: [
{ id: 2, pages: '12-34' },
{ id: 1, pages: '45-67' }
]
},
]
Run Code Online (Sandbox Code Playgroud)
所以对象顺序已经改变,因为A在S之前,并且(现在)第二个对象中的页面元素的顺序是相反的顺序.
对于第一部分,您可以使用String#localeCompare. 并对页面数组使用另一个排序函数来分割字符串。
var array = [{ id: 1, text: 'Some text', elements: [{ id: 1, pages: '45-67' }, { id: 2, pages: '12-34' }, { id: 4, pages: '12-5' }, { id: 5, pages: '12' }] }, { id: 3, text: 'Another text', elements: [{ id: 3, pages: '12-34' }] }];
array.sort(function (a, b) {
return a.text.localeCompare(b.text);
});
array.forEach(function (el) {
el.elements.sort(function (a, b) {
var aa = a.pages.split('-'),
bb = b.pages.split('-');
return aa[0] - bb[0] || (aa[1] || 0) - (bb[1] || 0);
});
});
console.log(array);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44 次 |
| 最近记录: |