JavaScript 数组 : Move current item to back

标签 javascript arrays sorting

使用 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/

相关文章:

python - numpy 数组的平均值返回 NaN

python - 为 OpenCV imshow 连接 Numpy 数组

arrays - 如何按最频繁点的顺序排列 CGPoint 数组

database - Cloudant:此排序不存在索引,请尝试按排序字段建立索引

javascript - Chrome 浏览器中的“代码片段”选项卡有什么用

JavaScript 闭包和范围问题

javascript - 可以使用表达式代替 setTimeout 函数中的回调函数吗?

javascript - 将 CSS "stripe"效果应用于 JavaScript 中动态插入的表格行

javascript - 对 Node 中的字母数字 li 进行排序

algorithm - 合并排序数组和未排序数组