Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据javascript中另一个数组的值对数组进行排序_Javascript_Arrays - Fatal编程技术网

如何根据javascript中另一个数组的值对数组进行排序

如何根据javascript中另一个数组的值对数组进行排序,javascript,arrays,Javascript,Arrays,我有两个数组,我希望第一个数组按第二个数组中的值排序。我的问题是,我的第一个数组的元素是字符串,我的第二个数组只是整数。我要实现的数组必须具有从最短时间到最长时间的时间 第一个阵列: [ '<tr data-time="1437513780"><td>test01</td>', '<tr data-time="1435779420"><td>test02</td>', '<tr data-time="1438

我有两个数组,我希望第一个数组按第二个数组中的值排序。我的问题是,我的第一个数组的元素是字符串,我的第二个数组只是整数。我要实现的数组必须具有从最短时间到最长时间的时间

第一个阵列:

[
 '<tr data-time="1437513780"><td>test01</td>', 
 '<tr data-time="1435779420"><td>test02</td>', 
 '<tr data-time="1438316400"><td>test03</td>'
]
我想要实现的阵列:

[
 '<tr data-time="1435779420"><td>test02</td>', 
 '<tr data-time="1437513780"><td>test01</td>', 
 '<tr data-time="1438316400"><td>test03</td>'
]
[
“test02”,
“test01”,
‘test03’
]
编辑:我需要的是一个基于第二个数组的值的新数组,但它在第一个数组中的外观相同

似乎是这样的:

var a = ['<tr data-time="1437513780"><td>test01</td>', '<tr data-time="1435779420"><td>test02</td>', '<tr data-time="1438316400"><td>test03</td>'];
var b = [1435779420, 1437513780, 1438316400];

var res = a.map(function(x, i) { return { val:x, key:b[i] } })
           .sort(function(x, y) { return (x.key>y.key) - (x.key<y.key) })
           .map(function(x) { return x.val });
['<tr data-time="1437513780"><td>test01</td>', '<tr data-time="1435779420"><td>test02</td>', '<tr data-time="1438316400"><td>test03</td>'].sort()
似乎是这样的:

var a = ['<tr data-time="1437513780"><td>test01</td>', '<tr data-time="1435779420"><td>test02</td>', '<tr data-time="1438316400"><td>test03</td>'];
var b = [1435779420, 1437513780, 1438316400];

var res = a.map(function(x, i) { return { val:x, key:b[i] } })
           .sort(function(x, y) { return (x.key>y.key) - (x.key<y.key) })
           .map(function(x) { return x.val });
['<tr data-time="1437513780"><td>test01</td>', '<tr data-time="1435779420"><td>test02</td>', '<tr data-time="1438316400"><td>test03</td>'].sort()

如果我理解正确,则不必基于第二个数组进行排序。只需提取数字并按其排序即可

var r = /\d+/;
var arrToSort = ['<tr data-time="1437513780"><td>test01</td>', '<tr data-time="1435779420"><td>test02</td>', '<tr data-time="1438316400"><td>test03</td>'];

sortedArr = arrToSort.sort(function(a, b) { return a.match(r) - b.match(r); })
var r=/\d+/;
var arrToSort=['test01','test02','test03'];
sortedar=arrToSort.sort(函数(a,b){返回a.match(r)-b.match(r);})

如果我理解正确,您不必根据第二个数组进行排序。只需提取数字并按其排序即可

var r = /\d+/;
var arrToSort = ['<tr data-time="1437513780"><td>test01</td>', '<tr data-time="1435779420"><td>test02</td>', '<tr data-time="1438316400"><td>test03</td>'];

sortedArr = arrToSort.sort(function(a, b) { return a.match(r) - b.match(r); })
var r=/\d+/;
var arrToSort=['test01','test02','test03'];
sortedar=arrToSort.sort(函数(a,b){返回a.match(r)-b.match(r);})

由于JavaScript的自然数组排序是从低到高,因此可以对数组使用默认排序函数,如下所示:

var a = ['<tr data-time="1437513780"><td>test01</td>', '<tr data-time="1435779420"><td>test02</td>', '<tr data-time="1438316400"><td>test03</td>'];
var b = [1435779420, 1437513780, 1438316400];

var res = a.map(function(x, i) { return { val:x, key:b[i] } })
           .sort(function(x, y) { return (x.key>y.key) - (x.key<y.key) })
           .map(function(x) { return x.val });
['<tr data-time="1437513780"><td>test01</td>', '<tr data-time="1435779420"><td>test02</td>', '<tr data-time="1438316400"><td>test03</td>'].sort()
['test01','test02','test03'].sort()

但是,请记住,只有对数组中的所有元素使用相同的模板,并且日期-时间数字始终为10位数时,此方法才有效。否则,您需要使用自定义排序函数。

由于JavaScript的自然数组排序是从低到高,因此您可以对数组使用默认排序函数,如下所示:

var a = ['<tr data-time="1437513780"><td>test01</td>', '<tr data-time="1435779420"><td>test02</td>', '<tr data-time="1438316400"><td>test03</td>'];
var b = [1435779420, 1437513780, 1438316400];

var res = a.map(function(x, i) { return { val:x, key:b[i] } })
           .sort(function(x, y) { return (x.key>y.key) - (x.key<y.key) })
           .map(function(x) { return x.val });
['<tr data-time="1437513780"><td>test01</td>', '<tr data-time="1435779420"><td>test02</td>', '<tr data-time="1438316400"><td>test03</td>'].sort()
['test01','test02','test03'].sort()

但是,请记住,只有对数组中的所有元素使用相同的模板,并且日期-时间数字始终为10位数时,此方法才有效。否则,您需要使用自定义排序函数。

您实际上不需要第二个数组。在第一个数组的字符串中有要排序的值。相反,您可以利用javascript内置的
Array.sort
函数接收函数compare这一事实。您可以使用它来自定义排序行为

该函数接受两个参数,这两个值被排序。如果第一个值“大于”第二个值,则函数应返回正数。如果第一个值“小于”第二个值,则函数应返回负数。如果它们相等,则返回0

为此:

array.sort(function(element1, element2){
    var num1 = parseInt(element1.match(/data-time="(\d+)"/)[1]);
    var num2 = parseInt(element2.match(/data-time="(\d+)"/)[1]);
    if(num1 > num2)
        return 1;
    if(num1 < num2)
        return -1;
    return 0;
});
array.sort(函数(element1,element2){
var num1=parseInt(element1.match(/data time=“(\d+)/”)[1]);
var num2=parseInt(element2.match(/data time=“(\d+)/”)[1]);
如果(num1>num2)
返回1;
如果(num1
正则表达式匹配数据时间=“(数字)”,index1匹配正则表达式匹配组中的数字。parseInt函数将这些转换为数字。然后,我们可以使用这些数字来创建正常的排序行为

编辑:如果需要它根据firstarray中已经存在的顺序进行排序,则需要稍作修改。您需要在第二个数组中找到数字的索引

array.sort(function(element1, element2){
    var num1 = parseInt(element1.match(/data-time="(\d+)"/)[1]);
    var num2 = parseInt(element2.match(/data-time="(\d+)"/)[1]);
    num1 = array2.indexOf(num1);
    num2 = array2.indexOf(num2);
    if(num1 > num2)
        return 1;
    if(num1 < num2)
        return -1;
    return 0;
});
array.sort(函数(element1,element2){
var num1=parseInt(element1.match(/data time=“(\d+)/”)[1]);
var num2=parseInt(element2.match(/data time=“(\d+)/”)[1]);
num1=数组2.indexOf(num1);
num2=数组2.indexOf(num2);
如果(num1>num2)
返回1;
如果(num1
您实际上不需要第二个阵列。在第一个数组的字符串中有要排序的值。相反,您可以利用javascript内置的
Array.sort
函数接收函数compare这一事实。您可以使用它来自定义排序行为

该函数接受两个参数,这两个值被排序。如果第一个值“大于”第二个值,则函数应返回正数。如果第一个值“小于”第二个值,则函数应返回负数。如果它们相等,则返回0

为此:

array.sort(function(element1, element2){
    var num1 = parseInt(element1.match(/data-time="(\d+)"/)[1]);
    var num2 = parseInt(element2.match(/data-time="(\d+)"/)[1]);
    if(num1 > num2)
        return 1;
    if(num1 < num2)
        return -1;
    return 0;
});
array.sort(函数(element1,element2){
var num1=parseInt(element1.match(/data time=“(\d+)/”)[1]);
var num2=parseInt(element2.match(/data time=“(\d+)/”)[1]);
如果(num1>num2)
返回1;
如果(num1
正则表达式匹配数据时间=“(数字)”,index1匹配正则表达式匹配组中的数字。parseInt函数将这些转换为数字。然后,我们可以使用这些数字来创建正常的排序行为

编辑:如果需要它根据firstarray中已经存在的顺序进行排序,则需要稍作修改。您需要在第二个数组中找到数字的索引

array.sort(function(element1, element2){
    var num1 = parseInt(element1.match(/data-time="(\d+)"/)[1]);
    var num2 = parseInt(element2.match(/data-time="(\d+)"/)[1]);
    num1 = array2.indexOf(num1);
    num2 = array2.indexOf(num2);
    if(num1 > num2)
        return 1;
    if(num1 < num2)
        return -1;
    return 0;
});
array.sort(函数(element1,element2){
var num1=parseInt(element1.match(/data time=“(\d+)/”)[1]);
var num2=parseInt(element2.match(/data time=“(\d+)/”)[1]);
num1=数组2.indexOf(num1);
num2=数组2.indexOf(num2);
如果(num1>num2)
返回1;
如果(num1
您必须向我们展示您为实现目标所做的努力。我真的不知道如何实现这一目标,这就是为什么我需要您的帮助来展示如何做到这一点=/不幸的是,StackOverflow不是“开始”某件事的正确位置。如果您已经尝试过,但失败了,您可以使用第二个数组生成第一个数组。这样,您只需要对数字数组进行排序。请看一看,您必须向我们展示您为实现目标所做的努力。我真的不知道如何实现这一点,这就是为什么我需要您的帮助来展示如何做到这一点=/不幸的是,StackOverflow不是“开始”某件事情的正确位置。这是你已经尝试过的地方,