我正在尝试编写一个排序功能,其中列表应该具有第一个项目,type = 'text/xml'
但之后所有项目都应按名称升序进行排序。
我的数据集中只有两种类型:text/xml
和img/jpg
这是我的代码:
var fileArray = [
{"name":'1101.jpg', type:"img/jpg"},
{"name":'1301.jpg', type:"img/jpg"},
{"name":'1001.jpg', type:"img/jpg"},
{"name":'1005.jpg', type:"img/jpg"},
{"name":'1201.jpg', type:"img/jpg"},
{"name":'1500.jpg', type:"img/jpg"},
{"name":'MyFile.xml', type:"text/xml"},
{"name":'1700.jpg', type:"img/jpg"},
];
fileArray.sort(function (a, b) { return b.type >= a.type });
fileArray.sort(function (a, b) {
if (a.type == 'text/xml') {
return -1000;
}
else {
var rc = 0;
var c = a.name;
var d = b.name;
if (c < d)
rc = -1;
if (c > d)
rc = 1;
return rc;
}
});
console.log(fileArray);
这是我的jsfiddle:https ://jsfiddle.net/mofuqada/1/
似乎可以处理示例数据。但是,想问您是否在代码中看到任何问题,可能不适用于100个文件
您可以使用检查并将其用作排序的值。
(a.type !== 'text/xml') - (b.type !== 'text/xml')
这部分可以分为
a.type !== 'text/xml'
为a
和为b
这是检查是否不相等并返回布尔值(如true
或)的简单检查false
。在该情况下,'text/xml'
false
否则true
。
但是我需要数字值,并且'text/xml'
必须具有比其他字符串小的值。所以它确实有转换false
到0
和true
到1
。区别在于排序的值。
以后,0
在这种情况下,仅在先前计算错误的情况下才对名称进行比较。
var fileArray = [{ name: '1101.jpg', type: "img/jpg" }, { name: '1301.jpg', type: "img/jpg" }, { name: '1001.jpg', type: "img/jpg" }, { name: '1005.jpg', type: "img/jpg" }, { name: '1201.jpg', type: "img/jpg" }, { name: '1500.jpg', type: "img/jpg" }, { name: 'MyFile.xml', type: "text/xml" }, { name: '1700.jpg', type: "img/jpg" }];
fileArray.sort(function (a, b) {
return (a.type !== 'text/xml') - (b.type !== 'text/xml') || a.name.localeCompare(b.name);
});
console.log(fileArray);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句