Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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_Node.js - Fatal编程技术网

Javascript 基于字符串值的数组排序无效

Javascript 基于字符串值的数组排序无效,javascript,node.js,Javascript,Node.js,我试图使用字符串字段对数组进行排序,但排序错误 我的代码看起来像这样 让tempWEArray=[ { “自”:“09/2005”, “致”:“11/2006” }, { “自”:“09/2006”, “致”:“11/2007” }, { “自”:“12/2007”, “致”:“01/2009” }, { “自”:“01/2009”, “至”:“2012年12月” }, { “自”:“2013年1月”, “至”:“2018年3月” }] 功能排序(道具){ 返回函数(a,b){ 如果(

我试图使用
字符串
字段对
数组
进行排序,但排序错误

我的代码看起来像这样

让tempWEArray=[
{
“自”:“09/2005”,
“致”:“11/2006”
}, 
{
“自”:“09/2006”,
“致”:“11/2007”
}, 
{
“自”:“12/2007”,
“致”:“01/2009”
}, 
{
“自”:“01/2009”,
“至”:“2012年12月”
}, 
{
“自”:“2013年1月”,
“至”:“2018年3月”
}]
功能排序(道具){
返回函数(a,b){
如果(a[prop]b[prop])
{
返回1;
}
返回0;
}
}

console.log(tempWEArray.sort(sortBy(“to”))
将其转换为排序中的日期,它将按照您的预期工作

分离日期字符串的每个组成部分并将其反转

const dateArray = b[prop].split("/").reverse()
使用spread操作符创建带有的时间戳,然后使用
新建日期
创建日期

new Date(Date.UTC(...dateArray))
然后在两个日期之间使用
-
查找排序函数中哪个日期更大

一些例子:

const res=新日期(Date.UTC(…“11/2006”.split(“/”).reverse())

控制台日志(res)将其转换为排序中的日期,它将按您的预期工作

分离日期字符串的每个组成部分并将其反转

const dateArray = b[prop].split("/").reverse()
使用spread操作符创建带有的时间戳,然后使用
新建日期
创建日期

new Date(Date.UTC(...dateArray))
然后在两个日期之间使用
-
查找排序函数中哪个日期更大

一些例子:

const res=新日期(Date.UTC(…“11/2006”.split(“/”).reverse())

控制台日志(res)您可以首先解析这些日期,然后使用
-
对它们进行排序

let arr=[{“from”:“09/2005”,“to”:“11/2006”},{“from”:“09/2006”,“to”:“11/2007”},{“from”:“12/2007”,“to”:“01/2009”},{“from”:“01/2009”,“to”:“12/2012”},{“from”:“01/2013”,“to”:“03/2018”}]
const parse=str=>{
让日期=新日期;
let[月,年]=str.split('/'))
日期:设定年(年);
日期.设置月(+1个月)
返回日期;
}
const sortBy=prop=>(a,b)=>{
返回parse(b[prop])-parse(a[prop])
}
arr.sort(sortBy('to'))

log(arr)
您可以首先解析这些日期,然后使用
-
对它们进行排序

let arr=[{“from”:“09/2005”,“to”:“11/2006”},{“from”:“09/2006”,“to”:“11/2007”},{“from”:“12/2007”,“to”:“01/2009”},{“from”:“01/2009”,“to”:“12/2012”},{“from”:“01/2013”,“to”:“03/2018”}]
const parse=str=>{
让日期=新日期;
let[月,年]=str.split('/'))
日期:设定年(年);
日期.设置月(+1个月)
返回日期;
}
const sortBy=prop=>(a,b)=>{
返回parse(b[prop])-parse(a[prop])
}
arr.sort(sortBy('to'))
console.log(arr)
您可以用于日期校准。例如:

让tempWEArray=[
{
“自”:“09/2005”,
“致”:“11/2006”
}, 
{
“自”:“09/2006”,
“致”:“11/2007”
}, 
{
“自”:“12/2007”,
“致”:“01/2009”
}, 
{
“自”:“01/2009”,
“至”:“2012年12月”
}, 
{
“自”:“2013年1月”,
“至”:“2018年3月”
}];
const sortedArray=tempWEArray.sort(
(第一、第二)=>力矩(第一至'MM/YYYY')
.isSameOrAfter(时刻(第二个至“MM/YYYY”));
控制台日志(Darray)
您可以用于日期露营。例如:

让tempWEArray=[
{
“自”:“09/2005”,
“致”:“11/2006”
}, 
{
“自”:“09/2006”,
“致”:“11/2007”
}, 
{
“自”:“12/2007”,
“致”:“01/2009”
}, 
{
“自”:“01/2009”,
“至”:“2012年12月”
}, 
{
“自”:“2013年1月”,
“至”:“2018年3月”
}];
const sortedArray=tempWEArray.sort(
(第一、第二)=>力矩(第一至'MM/YYYY')
.isSameOrAfter(时刻(第二个至“MM/YYYY”));
控制台日志(Darray)

您可以将日期模式替换为可比较的字符串,如果该字符串没有日期模式,则可以省略

功能排序(道具){
返回函数(a,b){
var valueA=a[prop].replace(/^(\d{2})\/(\d{4})$/,“$2-$1”),
valueB=b[prop]。替换(/^(\d{2})\/(\d{4})$/,“$2-$1”);
返回值a.localeCompare(valueB);
}
}
var tempWEArray=[{从:“09/2005”到:“11/2006”},{从:“09/2006”到:“11/2007”},{从:“12/2007”到:“01/2009”},{从:“01/2009”到:“12/2012”},{从:“01/2013”到:“03/2018”}]
console.log(tempWEArray.sort(sortBy(“to”)))

.as console wrapper{max height:100%!important;top:0;}
您可以使用可比较的字符串替换日期模式,如果该字符串没有日期模式,则可以省略

功能排序(道具){
返回函数(a,b){
var valueA=a[prop].replace(/^(\d{2})\/(\d{4})$/,“$2-$1”),
valueB=b[prop]。替换(/^(\d{2})\/(\d{4})$/,“$2-$1”);
返回值a.localeCompare(valueB);
}
}
var tempWEArray=[{从:“09/2005”到:“11/2006”},{从:“09/2006”到:“11/2007”},{从:“12/2007”到:“01/2009”},{从:“01/2009”到:“12/2012”},{从:“01/2013”到:“03/2018”}]
console.log(tempWEArray.sort(sortBy(“to”)))

。作为控制台包装器{max height:100%!important;top:0;}
使用
比较字符串没有多大意义,请尝试
localeCompare
而不是按字母顺序排序对象,与您告诉它的排序方式完全相同。@CertainPerformance我在编写该函数时提到过这一点。
localeCompare
会解决吗?@connexo哦!我的错。如何确保它正确排序?使用
比较字符串没有多大意义,请尝试
localeCompare
,而不是按字母顺序排序对象,就像您告诉它排序一样。@CertainPerformance我在编写该函数时提到过这一点