Javascript 如何查找表中列的重复值并跨列执行排序
我在给定的表中进行排序,我要求根据排序隐藏和显示值,例如:如果用户单击(Credit列,则excellent和allbal列值对于ASC和DESC都应为空),则工作正常。我想执行排序,如(借方列值相同,我想根据“日期”(Asc至描述)对借方列进行排序。如果“借方”和“日期”列都相同,我想根据数据对借方列进行排序“visitorCode”(Asc至Desc) 例如,在借方列中,如果我有5个值(100、100、100、200、300),我想显示基于日期列的借方列值。如果日期和借方列相同,例如:日期列有(2021-02-04、2021-02-04、2021-02-10、2021-02-08)(YYYY-MM-DD)借方列(100100100300300)我想根据“访问者代码””对借方列进行排序 我已经尝试了很多方法来实现这一点,不幸的是我所有的逻辑都失败了。任何人都可以指导我如何执行上述排序。提前感谢 下面是我的代码:Javascript 如何查找表中列的重复值并跨列执行排序,javascript,reactjs,sorting,Javascript,Reactjs,Sorting,我在给定的表中进行排序,我要求根据排序隐藏和显示值,例如:如果用户单击(Credit列,则excellent和allbal列值对于ASC和DESC都应为空),则工作正常。我想执行排序,如(借方列值相同,我想根据“日期”(Asc至描述)对借方列进行排序。如果“借方”和“日期”列都相同,我想根据数据对借方列进行排序“visitorCode”(Asc至Desc) 例如,在借方列中,如果我有5个值(100、100、100、200、300),我想显示基于日期列的借方列值。如果日期和借方列相同,例如:日期列
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)。请您指导我在哪里使用您添加的上述逻辑。提前谢谢