arrays - 如何在 React JS 中使用 _.sortBy 函数对多维数组进行排序?
问题描述
下面是代码:
import _ from 'lodash'
import React, { Component } from 'react'
import { Table } from 'semantic-ui-react'
const tableData = [
{
name: 'John',
age: 15,
gender: 'Male',
"providerExtension":
{
name: "true",
age: 45,
key: "isEncrypt"
}
},
{
name: 'Amber',
age: 42,
gender: 'Female',
"providerExtension":
{
name: "true",
age: 15,
key: "isEncrypt"
}
},
{
name: 'Leslie',
age: 25,
gender: 'Female',
"providerExtension":
{
name: "true",
age: 25,
key: "isEncrypt"
}
},
{
name: 'Ben',
age: 70,
gender: 'Male',
"providerExtension":
{
age: 75,
name: "true",
key: "isEncrypt"
}
},
]
export default class TableExampleSortable extends Component {
state = {
column: null,
data: tableData,
direction: null,
}
handleSort = clickedColumn => () => {
const { column, data, direction } = this.state
if (column !== clickedColumn) {
this.setState({
column: clickedColumn,
data: _.sortBy(data, [clickedColumn]),
direction: 'ascending',
})
return
}
this.setState({
data: data.reverse(),
direction: direction === 'ascending' ? 'descending' : 'ascending',
})
}
render() {
const { column, data, direction } = this.state
return (
<Table sortable celled fixed>
<Table.Header>
<Table.Row>
<Table.HeaderCell
sorted={column === 'name' ? direction : null}
onClick={this.handleSort('name')}
>
Name
</Table.HeaderCell>
<Table.HeaderCell
sorted={column === 'age' ? direction : null}
onClick={this.handleSort('age')}
>
Age
</Table.HeaderCell>
<Table.HeaderCell
sorted={column === 'gender' ? direction : null}
onClick={this.handleSort('gender')}
>
Gender
</Table.HeaderCell>
</Table.Row>
</Table.Header>
<Table.Body>
{_.map(data, (data) => (
<Table.Row key={name}>
<Table.Cell>{data.name}</Table.Cell>
<Table.Cell>{data.providerExtension.age}</Table.Cell>
<Table.Cell>{data.gender}</Table.Cell>
</Table.Row>
))}
</Table.Body>
</Table>
)
}
}
其实我很新反应js。我需要对多维数组进行排序。在上面提到的代码中,我想对嵌套数组 providerExtension.name 中存在的键进行排序。
我不想对 tableData.name 进行排序。
我正在使用 _.sortBy 函数对数组进行排序。任何人都可以帮助我吗?
解决方案
您可以使用此解决方案:lodash orderBy on nested property。例如:
this.setState({
column: clickedColumn,
data: _.sortBy(data, `providerExtension.${clickedColumn}`),
direction: 'ascending',
})
参考: 模板文字
推荐阅读
- php - 将数据从 JS 传递到 PHP 不起作用
- string - 将字符串转换为浮点数。列标题中有一个 % 符号
- c++ - 与已安装静态库链接的共享库的 automake Mingw 交叉编译问题
- visual-studio-code - 使用 WSL bash 作为带有 anaconda 的 vscode 终端
- java - java8方法引用,允许不兼容的返回类型
- javascript - google maps from DivPixelToLatLng 意外结果
- node.js - 如何使用 multer 从表单中获取上传文件的路径
- r - 参数不是数字或逻辑:用一个字符串列返回 NA
- ios - 在为 IOS 发布之前如何查看我的应用页面?
- google-maps - 找不到离子谷歌服务