用javascript上的字符串数据对数组进行排序
Sorting array with string data on javascript
我有两个带有字符串数据的数组:
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/
相关文章:
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- Javascript中的多维数组排序索引问题
- 如何按日期对Javascript对象数组排序
- 数组排序后显示更改
- 当许多元素相等时,Javascript数组排序无法正常工作
- Javascript数组排序速度受字符串长度的影响
- 按唯一键将对象数组排序为数组
- 以 js 为单位的数组排序
- js 数组排序无法正常工作
- 数组排序.论点从何而来
- 不需要的数组排序
- 数组排序不正确/不可预测,使用 indexOf 时
- Javascript将数组排序到树中
- 随后的多维数组排序会产生意外的结果
- 数组排序基于纯javascript搜索文本匹配
- Javascript自定义数组按数组排序
- 使用字符串按属性错误对对象进行数组排序
- 多维数组排序
- JavaScript与PHP在数组排序中的对比
- Javascript-关联数组排序