Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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
Arrays 使用两个字段对映射函数进行反应排序_Arrays_Reactjs_Sorting_Map Function - Fatal编程技术网

Arrays 使用两个字段对映射函数进行反应排序

Arrays 使用两个字段对映射函数进行反应排序,arrays,reactjs,sorting,map-function,Arrays,Reactjs,Sorting,Map Function,我是React的初学者,我想通过两个过滤器对数组进行排序: {folder.actions .sort((a,b) => { return a.date_actual - b.date_actual || a.date_sched - b.date_sched }) .map(action => { ... 这段代码不起作用,我想用map函数按降序和混合两种日期类型“date\u actual”和“date\u sched”进行排序,而不是: ...

我是React的初学者,我想通过两个过滤器对数组进行排序:

{folder.actions
  .sort((a,b) => {
    return a.date_actual - b.date_actual || a.date_sched - b.date_sched
   })
  .map(action => {
   ...
这段代码不起作用,我想用map函数按降序和混合两种日期类型“date\u actual”和“date\u sched”进行排序,而不是:

...
  <Col xs={4}>
    {action.date_actual ? 
      new Date(action.date_actual).toLocaleDateString() : 
      new Date(action.date_sched).toLocaleDateString()
     }
  </Col>
...
18/04/2021 (date_sched)
03/11/2020 (date_actual)
18/04/2021 (date_sched)
03/11/2020 (date_actual)
03/11/2020 (date_actual)
03/11/2020 (date_actual)
12/04/2021 (date_sched)
03/11/2020 (date_actual)
03/11/2020 (date_actual)
。。。
{action.date_实际值?
新日期(action.Date_actual)。toLocaleDateString():
新日期(action.Date\u sched).toLocaleDateString()
}
...
2021年4月18日(日期附表)
2020年11月3日(实际日期)
2021年4月18日(日期附表)
2020年11月3日(实际日期)
2020年11月3日(实际日期)
2020年11月3日(实际日期)
2021年4月12日(日期附表)
2020年11月3日(实际日期)
2020年11月3日(实际日期)

谢谢你的时间和帮助

如果希望同时基于两种日期类型进行排序,可以在排序逻辑中使用
|
运算符。例如,假设有这样一个数组:(为了简单起见,我使用了一个数字)

const yourray=[
{第一天:0},
{第二天:1},
{第一天:3},
{第二天:2}
];
我们想要实现的是:

const yourray=[
{第一天:0},
{第二天:1},
{第二天:2}
{第一天:3},
];

您可以告诉javascript使用第一个日期,如果第一个日期不存在,则使用第二个日期

yourArray
.sort((a,b)=>(a.第一个日期| a.第二个日期)-(b.第一个日期| b.第二个日期));
//常量数组=[
//{第一天:0},
//{第二天:1},
//{第二天:2}
//{第一天:3},
// ];

感谢您的快速回复

为此:


{folder.actions
  .sort((a,b) => {
     return (a.date_actual || a.date_sched) - (b.date_actual || b.date_sched)
   })
  .map(action => {
...
return (
 ...
  <Col xs={4}>
   {action.date_actual ? 
     new Date(action.date_actual).toLocaleDateString() : 
     new Date(action.date_sched).toLocaleDateString()}
  </Col>
在数组的输入中,我有:

date_actual: "2020-11-03 17:30:30"
date_sched: null

有些条目是反向的,date_actual为空,date_sched为Full

您的排序函数将始终按照第一个条件进行排序,因为它将始终计算为true。 如果要按这两个字段进行排序,则必须明确定义这些条件:

e、 g。 如果(a.date1>b.date2)和(a.date2>b.date2)返回1
依此类推……

如果您可以选择添加其他库,Lodash是一个很棒的库,它提供了许多有用的实用程序来处理阵列。
sortBy()。你的问题不清楚。您的输入数据是什么样子的?那么,输出会是什么样子?@AjeetShah,在输入中我有一个数组,一些条目看起来像date\u-actual:(一个日期),date\u-sched:null,其他的date\u-actual:null,date\u-sched:(另一个日期)。在输出中,我希望所有日期都按反向排序。不要在注释中添加这些详细信息,请更新您的问题以包含这些详细信息(例如,
date\u actual
有一个值或
date\u sched
有一个值)。如果创建临时日期字段,排序逻辑可能会更简单,但不是必需的(例如,没有“have to”这里)@crashmstr事实上,我是从这里看过去的。谢谢你澄清这一点。谢谢你!我已经更新了我的答案
date_actual: "2020-11-03 17:30:30"
date_sched: null