使用 JavaScript,我有一个正在循环检查的文件路径数组。如果当前项目是一个文件夹,我想将它移到行的后面并移至下一个项目。最终结果将是文件在前,文件夹在最后一个文件之后。
我知道这应该很容易,但我已经为此奋斗了 2 天。我尝试了以下代码的各种版本但没有成功。出于此项目的目的,如果文件名中没有句点,我假设它是一个文件夹。
function sortArray(array) {
console.log('Original array: ' + array);
var z = array.length;
console.log('Array length is ' + z);
for(i = 0; i < z-1; i++)
{
var n = array.indexOf(array[i]);
if (array[i].indexOf('.') === -1)
{
console.log('Item is folder');
var fldr = array.splice(n, 1);
array.push(fldr);
}
}
console.log('Sorted array: ' + array);
}
最佳答案
简短的回答是,通过调用 splice
然后调用 push
,您将元素添加回 end(尾部)数组,而实际上您希望使用 unshift
将其移动到前面(头部)。
但是您还可以采用其他更简单的方法。例如,您可以使用带有自定义比较函数的 sort
对数组进行排序:
array.sort(function(x, y) {
var xFolder = x.indexOf('.') == -1 ? 1 : 0;
var yFolder = y.indexOf('.') == -1 ? 1 : 0;
return yFolder - xFolder;
});
这将快速对数组进行排序,将所有文件夹(根据您的“没有句点表示它是一个文件夹”标准)放在第一位。
另一种选择是返回一个新数组而不是修改当前数组。这很容易实现:
function putFoldersFirst(entries) {
var folders = [],
files = [];
for (var i = 0; i < entries.length; ++i) {
if (entries[i].indexOf('.') == -1) {
folders.push(entries[i]);
} else {
files.push(entries[i]);
}
}
return folders.concat(files);
}
一如既往,方法不止一种。
关于JavaScript 数组 : Move current item to back,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25210786/