Javascript排序数组

蒂姆·利伯蒂(Tim Liberty)

我正在尝试编写一个排序功能,其中列表应该具有第一个项目,type = 'text/xml'但之后所有项目都应按名称升序进行排序。

我的数据集中只有两种类型:text/xmlimg/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个文件

妮娜·斯科茨(Nina Scholz)

您可以使用检查并将其用作排序的值。

(a.type !== 'text/xml') - (b.type !== 'text/xml')

这部分可以分为

a.type !== 'text/xml'

a和为b

这是检查是否不相等并返回布尔值(如true)的简单检查false在该情况下,'text/xml' false否则true

但是我需要数字值,并且'text/xml'必须具有比其他字符串小的值。所以它确实有转换false0true1区别在于排序的值。

以后,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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章