将元素排序到数组的顶部
Sorting element to the top of an array
我正在尝试将自定义排序比较器应用于gullow流(因此我无法自定义数组)。我正在尝试按字母顺序对所有内容进行排序,除了一个共享文件,它应该排序到最前面。
不过,在运行一个简单的jsbin测试时,我看到了同样的问题——我需要的顶部文件排序不正确。
var files = [
'app/modules/t.css',
'app/shared/dialogs/c.css',
'app/shared/directives/m.css',
'app/shared/scss/app.css',
'app/shared/modals/a.css',
'app/shared/modals/b.css'
];
files.sort(function(file1, file2) {
var sort = 0;
if (file1.indexOf('shared/scss') > -1) {
sort = -1;
} else {
sort = file1.localeCompare(file2);
}
return sort;
});
结果输出不正确,app/shared/scss/app.css
只向上移动了两次。
"app/modules/t.css"
"app/shared/dialogs/c.css"
"app/shared/directives/m.css"
"app/shared/scss/app.css"
"app/shared/modals/a.css"
"app/shared/modals/b.css"
以下是我所期待的:
"app/shared/scss/app.css"
"app/modules/t.css"
"app/shared/dialogs/c.css"
"app/shared/directives/m.css"
"app/shared/modals/a.css"
"app/shared/modals/b.css"
嗯,file1
不是唯一可以包含app/shared/scss/app.css
的变量,还有file2
。在排序函数中,您只检查file1
。
因此,这个排序函数应该按照您想要的方式运行:
files.sort((file1, file2) => {
let sort = 0, substring = "shared/scss";
if (file1.includes(substring)) {
sort = -1;
}
else if (file2.includes(substring)) {
sort = 1;
}
else {
sort = file1.localeCompare(file2);
}
return sort;
});
您正在检查file1
是否包含shared/scss
,但没有检查file2
是否包含。添加另一个条件file2.indexOf('shared/scss') > -1
,如果为true,则将sort
设置为1
,使file2
显示在顶部。
var files = [
'app/modules/t.css',
'app/shared/dialogs/c.css',
'app/shared/directives/m.css',
'app/shared/scss/app.css',
'app/shared/modals/a.css',
'app/shared/modals/b.css'
];
files.sort(function(file1, file2) {
var sort = 0;
if (file1.indexOf('shared/scss') > -1) {
sort = -1;
} else if (file2.indexOf('shared/scss') > -1) {
sort = 1;
} else {
sort = file1.localeCompare(file2);
}
return sort;
});
这是一个将'shared/scss'
提升到首位的提案。
var files = ['app/modules/t.css', 'app/shared/dialogs/c.css', 'app/shared/directives/m.css', 'app/shared/scss/app.css', 'app/shared/modals/a.css', 'app/shared/modals/b.css'];
files.sort(function (a, b) {
var aa = +!a.match(/shared'/scss/),
bb = +!b.match(/shared'/scss/);
return aa - bb || a.localeCompare(b);
});
document.write('<pre> ' + JSON.stringify(files, 0, 4) + '</pre>');
相关文章:
- 如何在映射数组中添加换行符
- javascript结合了数组和字典
- 需要帮助设置json数组
- 不能从angular2中的子组件指定父组件中的数组
- 使用JS将数组转换为json对象
- 数组在递归方法中设置为null
- knockoutjs可观察数组
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 将数组从PHP传递到Javascript
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 在函数中添加数组元素的数值
- 无法通过数组映射绑定
- javascript中的数组出错
- 将元素排序到数组的顶部
- 获取数组中的顶部关键字
- Javascript数组排序将字符串MAG250放在底部,其他项目放在ASC顶部
- 我如何将值添加到mongodb中数组的顶部
- 将下拉列表中的一个值设置为值数组中的顶部值
- 如何使用javascript从数组中获得所需的顶部元素
- 如何使用AngularFire将对象移动到数组的顶部