用javascript上的字符串数据对数组进行排序

Sorting array with string data on javascript

本文关键字:数组 排序 数据 javascript 字符串      更新时间:2023-09-26

我有两个带有字符串数据的数组:

var AA = ["~/80/Blue/1.png","~/80/Blue/2.png","~/80/Black/1.png","~/80/Black/2.png"];
var BB = ["~/81/Blue/1.png","~/81/Blue/2.png","~/81/Black/1.png","~/81/Black/2.png"];

我需要把这些数组连接起来,然后像这样排序:

 CC = ["~/80/Blue/1.png","~/81/Blue/1.png","~/80/Blue/2.png","~/81/Blue/2.png","~/80/Black/1.png","~/81/Black/1.png","~/80/Black/2.png","~/81/Black/2.png"];

排序标准是,我需要有一对具有相同"颜色目录"和相同文件名的数组元素。

我试过这个:

var CC = AA.concat(BB);
CC.sort (function(a,b) {
    var Mask = /'W'w+'W'd'Wpng/;
    var A =[];
    var B = [];
    var s1 = a.toLowerCase();
    var s2 = b.toLowerCase();
    for (var i=0; i<s1.length; i++){
      A.push(s1[i].match(Mask));
    }
    for (var i=0; i<s2.length; i++){
      B.push(s2[i].match(Mask));
    }
    for (var i=0; i<A.length; i++){
      for (var j=0; j<B.length; j++){
        if (A[i] < B[j]) {return -1;};
        if (A[i] > B[j]) {return 1;};
        else {return 0;}
        }
    }

首先,连接两个数组,然后使用arrays.sort方法进行排序,将所需的排序逻辑作为sortFunction参数进行传递。

var AA = ["~/80/Blue/1.png","~/80/Blue/2.png","~/80/Black/1.png","~/80/Black/2.png"];
var BB = ["~/81/Blue/1.png","~/81/Blue/2.png","~/81/Black/1.png","~/81/Black/2.png"];
var CC = [];

var CC = AA.concat(BB);
function string_split_comparator(a, b) {
   var A_colorFile = a.split('/').splice(2).join('/'); /* Blue/1.png */                
   var B_colorFile = b.split('/').splice(2).join('/');
   var A_directoryNum = a.split('/')[1]; /* 80 */
   var B_directoryNum = b.split('/')[1];
   if(A_colorFile !== B_colorFile){
      return A_colorFile < B_colorFile;
   } else{
      return A_directoryNum < B_directoryNum 
   }
}
CC.sort(string_split_comparator);
var AA = ["~/80/Blue/1.png","~/80/Blue/2.png","~/80/Black/1.png","~/80/Black/2.png"];
var BB = ["~/81/Blue/1.png","~/81/Blue/2.png","~/81/Black/1.png","~/81/Black/2.png"];
var CC = [];
var longestArr = 0;
if (AA.length > BB.length) {
 longestArr = AA.length;
} else {
 longestArr = BB.length;
}
    for (var i = 0; i < longestArr; i++) {
      if (AA[i]!==undefined) {
        CC.push(AA[i]);
      };
      if (BB[i]!==undefined) {
        CC.push(BB[i]);
      };
    }

这就是你想要的吗?

以下是如何压缩两个相等长度的数组。

var CC = AA.reduce(function(result, value, i) {
    return result.concat(value, BB[i]);
}, []);

JSFiddle演示:https://jsfiddle.net/uh0q2eqb/

以下是如何将基于目录名和文件名的等长数组排序为字符串,然后对其进行压缩。

AA.sort(comparator);
BB.sort(comparator);
var CC = AA.reduce(function(result, value, i) {
    return result.concat(value, BB[i]);
}, []);
function comparator(a, b) {
  var A = a.split('/').splice(2).join('/');
  var B = b.split('/').splice(2).join('/');
  if (A > B) {
    return 1;
  } else if (A < B) {
    return -1;
  } else {
    return 0;
  }
}

JSFiddle演示:https://jsfiddle.net/uh0q2eqb/1/