gpt4 book ai didi

javascript - 排序方法及索引

转载 作者:行者123 更新时间:2023-12-01 05:33:27 25 4
gpt4 key购买 nike

我正在我的项目中尝试固定数据表。

但是我在排序方面遇到了问题。

这里我使用这个例子: https://github.com/facebook/fixed-data-table/blob/master/examples/old/SortExample.js

按 desc 或 asc 排序。但我对此有疑问。

例如,当我第一次按名称对其进行排序时,它会带来这个已排序的数组。

id:2 姓名:玛丽

id:4 姓名:玛丽

id:5 姓名:玛丽

id:1 姓名:安娜

id:3 姓名:安娜

没关系。但是当我按名称 desc 再次排序时。它带来了。

id:4 姓名:玛丽

id:2 姓名:玛丽

id:5 姓名:玛丽

id:3 姓名:安娜

id:1 姓名:安娜

好的,它按名称排序,但问题是:它更改了相同值的索引。例如,它将 (id:4 name:Mary) 带到第一行。

但是当我第一次排序时,它带来了(id:2 name:Mary)。

为什么它会改变相同的值索引?

排序方法有问题吗?

编辑:这是我的完整代码:

var FixedDataTable = require('fixed-data-table');
var React = require('react');

var Column = FixedDataTable.Column;
var Table = FixedDataTable.Table;

var SortTypes = {
ASC: 'ASC',
DESC: 'DESC',
};

function renderDate(/*object*/ cellData) {
return <span>{cellData.toLocaleString()}</span>;
}

var SortExample = React.createClass({
getInitialState() {
return {
rows: [{"id":"1","name":"Mary"},{"id":"2","name":"Felix"},
{"id":"3","name":"Mary"},{"id":"4","name":"Felix"},
{"id":"5","name":"Mary"},{"id":"6","name":"Felix"},
{"id":"7","name":"Mary"},{"id":"8","name":"Felix"},
{"id":"9","name":"Mary"},{"id":"10","name":"Felix"},
{"id":"11","name":"Mary"},{"id":"12","name":"Felix"},
{"id":"13","name":"Mary"},{"id":"14","name":"Felix"},
{"id":"15","name":"Mary"},{"id":"16","name":"Felix"},
{"id":"17","name":"Mary"},{"id":"18","name":"Felix"} ,
{"id":"19","name":"Mary"},{"id":"20","name":"Felix"}],sortBy: 'id',
sortDir: null,
};
},

_rowGetter(rowIndex) {
return this.state.rows[rowIndex];
},

_sortRowsBy(cellDataKey) {
var sortDir = this.state.sortDir;
var sortBy = cellDataKey;
if (sortBy === this.state.sortBy) {
sortDir = this.state.sortDir === SortTypes.ASC ? SortTypes.DESC : SortTypes.ASC;
} else {
sortDir = SortTypes.DESC;
}

var rows = this.state.rows.slice();
rows.sort((a, b) => {
var sortVal = 0;
if (a[sortBy] > b[sortBy]) {
sortVal = 1;
}
if (a[sortBy] < b[sortBy]) {
sortVal = -1;
}

if (sortDir === SortTypes.DESC) {
sortVal = sortVal * -1;
}

return sortVal;
});

this.setState({
rows,
sortBy,
sortDir,
});
},

_renderHeader(label, cellDataKey) {
return (
<a onClick={this._sortRowsBy.bind(null, cellDataKey)}>{label}</a>
);
},

render() {
var sortDirArrow = '';

if (this.state.sortDir !== null){
sortDirArrow = this.state.sortDir === SortTypes.DESC ? ' ↓' : ' ↑';
}

return (
<Table
rowHeight={50}
rowGetter={this._rowGetter}
rowsCount={this.state.rows.length}
headerHeight={50}
width={1000}
height={500}
{...this.props}>
<Column
headerRenderer={this._renderHeader}
label={'id' + (this.state.sortBy === 'id' ? sortDirArrow : '')}
width={100}
dataKey='id'
/>
<Column
headerRenderer={this._renderHeader}
label={'First Name' + (this.state.sortBy === 'name' ? sortDirArrow : '')}
width={200}
dataKey='name'
/>

</Table>
);
},
});









ReactDOM.render(
<SortExample/>,
document.getElementById('app')
)

最佳答案

我认为这会解决你的问题,我使用了 Lodash 库

`var data = [
{
id:1,
name: "Anna"
},
{
id:3,
name: "Anna"
},
{
id:2,
name: "Mary"
},
{
id:4,
name: "Mary"
},
{
id:5,
name: "Mary"
}
];
var sortArray = _.sortBy(data, function(o) { return o.name; });
var reverseSortArray = _.cloneDeep(sortArray).reverse();
console.log("sort Array: ", sortArray);
console.log("reverse Sort Array", reverseSortArray);`

关于javascript - 排序方法及索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35537709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com