javascript上带字符串数据的排序数组
我有两个包含字符串数据的数组:javascript上带字符串数据的排序数组,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有两个包含字符串数据的数组: 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"]; 我需要对这些数组进行.concat,并按如下方式进行排序: CC = ["~/80/Blue/1.png","~/81/
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"];
我需要对这些数组进行.concat,并按如下方式进行排序:
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;}
}
}
var CC=AA.concat(BB);
CC.sort(函数(a,b){
变量掩码=/\W\W+\W\d\Wpng/;
var A=[];
var B=[];
var s1=a.toLowerCase();
var s2=b.toLowerCase();
对于(var i=0;ivar 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;
如果(AA.长度>BB.长度){
longestArr=AA.长度;
}否则{
longestArr=BB.长度;
}
对于(变量i=0;i
这就是您想要的吗?以下是如何压缩两个长度相等的数组
var CC = AA.reduce(function(result, value, i) {
return result.concat(value, BB[i]);
}, []);
jsiddle演示:
下面介绍如何根据目录名和文件名将等长数组排序为字符串,然后将其压缩
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;
}
}
AA.排序(比较器);
BB.排序(比较器);
var CC=AA.reduce(函数(结果、值、i){
返回结果concat(值,BB[i]);
}, []);
函数比较器(a,b){
var A=A.split('/')。splice(2)。join('/');
var B=B.split('/')。splice(2)。join('/');
如果(A>B){
返回1;
}否则如果(A
jsiddle演示:首先连接两个数组,然后使用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 CC=AA.concat(BB);
函数字符串分割比较器(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){
返回A_colorFile
您尝试了什么?请访问帮助中心,获取关于提问的建议。请编辑并添加到您的问题本身,以便用户可以阅读。排序的标准是什么?我需要一对一对的数组元素,具有相同的“颜色目录”和相同的文件名。你可以看到它应该是什么。我不认为这是“排序”--这是“交错”,对吗?这会在结尾留下一些未定义的。A和B是未定义的。@Vlad:你提到的颜色是按字母顺序倒序排列的。这是故意的吗?我的意思是,你需要在“黑色”之后加上“蓝色”还是它的反面?@Vlad:很好。很高兴我能帮忙:)
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);