我有一个包含一些信息的对象数组。我无法按照我想要的顺序渲染它们,我需要一些帮助。我这样渲染它们:
this.state.data.map(
(item, i) => <div key={i}> {item.matchID} {item.timeM} {item.description}</div>
)
是否可以在item.timeM
- 函数中使用map()
对它们进行升序排序,还是在使用地图之前必须对它们进行排序?
答案 0 :(得分:52)
这可能是您正在寻找的内容:
// ... rest of code
// copy your state.data to a new array and sort it by itemM in ascending order
// and then map
const myData = [].concat(this.state.data)
.sort((a, b) => a.itemM > b.itemM)
.map((item, i) =>
<div key={i}> {item.matchID} {item.timeM}{item.description}</div>
);
// render your data here...
方法sort
will mutate the original array。因此,我使用concat
方法创建了一个新数组。
答案 1 :(得分:6)
在映射对象之前,您需要对对象进行排序。使用sort()
函数和自定义比较器定义(如
var obj = [...this.state.data];
obj.sort((a,b) => a.timeM - b.timeM);
obj.map((item, i) => (<div key={i}> {item.matchID}
{item.timeM} {item.description}</div>))
答案 2 :(得分:3)
Chrome浏览器将整数值视为返回类型而非布尔值
extend-to-zoom
答案 3 :(得分:2)
this.state.data.sort((a, b) => a.item.timeM > b.item.timeM).map(
(item, i) => <div key={i}> {item.matchID} {item.timeM} {item.description}</div>
)
答案 4 :(得分:0)
尝试lodash sortBy
import * as _ from "lodash";
_.sortBy(data.applications,"id").map(application => (
console.log("application")
)
)
了解更多:lodash.sortBy
答案 5 :(得分:0)
const list = [
{ qty: 10, size: 'XXL' },
{ qty: 2, size: 'XL' },
{ qty: 8, size: 'M' }
]
list.sort((a, b) => (a.qty > b.qty) ? 1 : -1)
console.log(list)
输出:
[
{
"qty": 2,
"size": "XL"
},
{
"qty": 8,
"size": "M"
},
{
"qty": 10,
"size": "XXL"
}
]
答案 6 :(得分:0)
这种方法对我有用
const list = [
{ price: 10, plan: 'a' },
{ price: 2, plan: 'b' },
{ price: 8, plan: 'c' }
];
this.setState({ planList: list.sort((a,b)=> a.membership_plan_initial_price-b.membership_plan_initial_price) });
render(){
return(){
<div>
this.state.planList !== undefined && this.state.planList !== null &&
this.state.planList !== '' && this.state.planList.map((ele, index) => {
return (
<div key={index}> {ele.price}{ele.plan}</div>
)
})
</div>
}
}
谢谢
答案 7 :(得分:0)
this.state.data.sort((a, b) => a.objKey > b.objKey ? 1:-1).map((objKey, index)