Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.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_Reactjs_Sorting - Fatal编程技术网

Javascript 如何查找表中列的重复值并跨列执行排序

Javascript 如何查找表中列的重复值并跨列执行排序,javascript,reactjs,sorting,Javascript,Reactjs,Sorting,我在给定的表中进行排序,我要求根据排序隐藏和显示值,例如:如果用户单击(Credit列,则excellent和allbal列值对于ASC和DESC都应为空),则工作正常。我想执行排序,如(借方列值相同,我想根据“日期”(Asc至描述)对借方列进行排序。如果“借方”和“日期”列都相同,我想根据数据对借方列进行排序“visitorCode”(Asc至Desc) 例如,在借方列中,如果我有5个值(100、100、100、200、300),我想显示基于日期列的借方列值。如果日期和借方列相同,例如:日期列

我在给定的表中进行排序,我要求根据排序隐藏和显示值,例如:如果用户单击(Credit列,则excellentallbal列值对于ASCDESC都应为空),则工作正常。我想执行排序,如(借方列值相同,我想根据“日期”(Asc描述)对借方列进行排序。如果“借方”和“日期”列都相同,我想根据数据对借方列进行排序“visitorCode”(AscDesc

例如,在借方列中,如果我有5个值(100、100、100、200、300),我想显示基于日期列的借方列值。如果日期和借方列相同,例如:日期列有(2021-02-04、2021-02-04、2021-02-10、2021-02-08)(YYYY-MM-DD)借方列(100100100300300)我想根据“访问者代码””对借方列进行排序

我已经尝试了很多方法来实现这一点,不幸的是我所有的逻辑都失败了。任何人都可以指导我如何执行上述排序。提前感谢

下面是我的代码:

const props = {

    "rows" : 
    [{
        "visitiedDate": "2021-04-02",
        "visitorCode": [
            "ABC001"
        ], 
        "visittype": 1,
        "debit": 800,
        "credit": 100,
        "oustanding": 1000,
        "allbal":1000
    },
    {
        "visitiedDate": "2021-04-02",
        "visitorCode": [
            "ABC002"
        ], 
        "visittype": 1,
        "debit": 800,
        "credit": 100,
        "oustanding": 1000,
        "allbal":1000
    },
    {
        "visitiedDate": "2021-02-02",
        "visitorCode": [
            "ABC003"
        ], 
        "visittype": 2,
        "debit": 900,
        "credit": 100,
        "oustanding": 1000,
        "allbal":1000
    },
    {
        "visitiedDate": "2021-03-01",
        "visitorCode": [
            "ABC004"
        ], 
        "visittype": 2,
        "debit": 1000,
        "credit": 100,
        "oustanding": 1000,
        "allbal":1000
    },
    {
        "visitiedDate": "2021-04-02",
        "visitorCode": [
            "ABC005"
        ], 
        "visittype": 1,
        "debit": 500,
        "credit": 100,
        "oustanding": 1000,
        "allbal":1000
    }], 
    
    columns = [{
    "key": "date",
    "name": "Date",
    "isSort": true
  },
  
  {
    "key": "visittype",
    "name": "type",
    "isSort": true
  },
  
{
    "key": "vistiorCode",
    "name": "code",
    "isSort": false
  },
  
  {
    "key": "credit",
    "name": "camount",
    "isSort": true
  },
  
  {
    "key": "debit",
    "name": "damount",
    "isSort": true
  },

  {
    "key": "outstanding",
    "name": "outstandingBal",
  },
  
  {
    "key": "allbal",
    "name": "allBalance",
  },
]

const [col, setCol] = useState(columns)
const Rows = props.contractDetails; 
const TotalDetails = props.totalCount

function SortingRow(rows, col, sortMethod) {

  const sortRow = ((sortMethod === "ASC") || ((col === "type") || (col === "credit") || (col === "debit"))?
    rows.map(Details) => {
      if (col === "debit")
            return  Object.assign({}, Details, {outstanding: "", allbal: ""})   
      else  if(col === "credit"){
            return  Object.assign({}, Details, {outstanding: "", allbal: ""})   
            })
            : rows
  return sortMethod ?
    sortRow
    .slice()
    .sort(
      ({
        [col]: a
      }, {
        [col]: b
      }) =>
      (a === b ? 0 : a < b ? -1 : 1) *
      (sortMethod === "ASC" ? 1 : -1)
    }) :
    rows
}

const rows = col
  .slice()
  .reverse()
  .reduce(
    (sortedRows, {
      key: col,
      isSort,
      sortMethod
    }) =>
    isSort ? SortingRow(sortedRows, col, sortMethod) : sortedRows,
    Rows
  );

return (

  rows = {
    rows
  }
  col = {
    col
  }
  onSort = {
    (col, sortMethod) => setCol(
      cols.map(cl =>
        c.key === col ? Object.assign({}, cl, {
          sortMethod
        }) :
        cl
      )
    )
  }
)

    
} 
const props={
“行”:
[{
“访问日期”:“2021-04-02”,
“访问者代码”:[
“ABC001”
], 
“访问类型”:1,
“借方”:800,
“信用”:100,
“驱逐”:1000,
“allbal”:1000
},
{
“访问日期”:“2021-04-02”,
“访问者代码”:[
“ABC002”
], 
“访问类型”:1,
“借方”:800,
“信用”:100,
“驱逐”:1000,
“allbal”:1000
},
{
“访问日期”:“2021-02-02”,
“访问者代码”:[
“ABC003”
], 
“访问类型”:2,
“借方”:900,
“信用”:100,
“驱逐”:1000,
“allbal”:1000
},
{
“访问日期”:“2021-03-01”,
“访问者代码”:[
“ABC004”
], 
“访问类型”:2,
“借方”:1000,
“信用”:100,
“驱逐”:1000,
“allbal”:1000
},
{
“访问日期”:“2021-04-02”,
“访问者代码”:[
“ABC005”
], 
“访问类型”:1,
“借方”:500,
“信用”:100,
“驱逐”:1000,
“allbal”:1000
}], 
列=[{
“键”:“日期”,
“姓名”:“日期”,
“isSort”:正确
},
{
“键”:“visittype”,
“名称”:“类型”,
“isSort”:正确
},
{
“键”:“视觉代码”,
“名称”:“代码”,
“isSort”:错误
},
{
“关键”:“信用”,
“名称”:“卡蒙特”,
“isSort”:正确
},
{
“键”:“借方”,
“名称”:“damount”,
“isSort”:正确
},
{
“关键”:“杰出”,
“名称”:“杰出的巴尔”,
},
{
“密钥”:“allbal”,
“名称”:“allBalance”,
},
]
const[col,setCol]=useState(列)
const Rows=props.contractDetails;
const TotalDetails=props.totalCount
函数排序行(行、列、排序方法){
const sortRow=((sortMethod==“ASC”)||(col==“type”)||(col==“credit”)|(col==“debit”)?
rows.map(详细信息)=>{
如果(列==“借方”)
return Object.assign({},Details,{未完成:“”,allbal:})
否则如果(列==“信用”){
return Object.assign({},Details,{未完成:“”,allbal:})
})
:行
还击方法?
索特罗
.slice()
.分类(
({
[上校]:a
}, {
[上校]:b
}) =>
(a==b?0:a
isSort?SortingRow(sortedRows,col,sortMethod):sortedRows,
排
);
返回(
行={
排
}
列={
上校
}
onSort={
(col,sortMethod)=>setCol(
cols.map(cl=>
c、 key==col?Object.assign({},cl{
巫术
}) :
氯
)
)
}
)
} 

您可以通过使用
数组#sort()
方法来实现:

让行=[
{
访问日期:“2021-04-02”,
访问者代码:[“ABC001”],
访问类型:1,
借方:800,
学分:100,
驱逐:1000人,
合计:1000
},
{
访问日期:“2021-04-02”,
访问者代码:[“ABC002”],
访问类型:1,
借方:800,
学分:100,
驱逐:1000人,
合计:1000
},
{
访问日期:“2021-02-02”,
访问者代码:[“ABC003”],
访问类型:2,
借方:900,
学分:100,
驱逐:1000人,
合计:1000
},
{
访问日期:“2021-03-01”,
访问者代码:[“ABC004”],
访问类型:2,
借方:1000,
学分:100,
驱逐:1000人,
合计:1000
},
{
访问日期:“2021-04-02”,
访问者代码:[“ABC005”],
访问类型:1,
借方:500,
学分:100,
驱逐:1000人,
合计:1000
}
];
console.log(
行排序((a,b)=>
a、 借
? -1
:0和新日期(a.visitiedDate)<新日期(b.visitiedDate)
? -1
:0 | |(a.访问者代码[0])
感谢您的输入,我有点困惑我想在哪里添加上述代码,因为对于我正在使用的当前排序(sortMethod===“ASC”?1:-1)。请您指导我在哪里使用您添加的上述逻辑。提前谢谢