我有这个函数,可以按Defect(string)对数组进行排序,但是,我想遍历Count(number)。
getCount() {
let arr = this.state.rows
let arr2 = arr.filter(qc => qc.BinsByDayByOrchardsQCs.length > 0).map((qc) =>
qc.BinsByDayByOrchardsQCs.map((qc2) =>
qc2.BinsByDayByOrchardsQCsDefects.map((qc3) => qc3).sort((a, b)
=> a.Defect < b.Defect ? -1 : a.Defect > b.Defect ? 1: 0)));
return arr2
};
此函数返回
0: {BinsByDayByOrchardsQCsID: "-LbiHz7tuuJH71I_4IKw", Defect: "Bruise", Count: 2, BinsByDayByOrchardsQCs: null}
1: {BinsByDayByOrchardsQCsID: "-LbiHz7tuuJH71I_4IKw", Defect: "Hail damage", Count: 0, BinsByDayByOrchardsQCs: null}
2: {BinsByDayByOrchardsQCsID: "-LbiHz7tuuJH71I_4IKw", Defect: "Scuff", Count: 2, BinsByDayByOrchardsQCs: null}
3: {BinsByDayByOrchardsQCsID: "-LbiHz7tuuJH71I_4IKw", Defect: "Sunburn", Count: 1, BinsByDayByOrchardsQCs: null}
我的数组已排序,但是在我的原始函数中,我想遍历Count,而不是整个对象。
看起来像这样。
qc2.BinsByDayByOrchardsQCsDefects.map((qc3) => qc3.Count).sort((a, b)
=> a.Defect < b.Defect ? -1 : a.Defect > b.Defect ? 1: 0)));
但是我目前得到的是“编号”类型上不存在“属性'缺陷'
还应注意,我将TypeScript与React一起使用
我的界面
BinsByDayByOrchardsQCs: { BinsByDayByOrchardsQCsDefects: { Defect: string, Count: number }[] }[]
答案 0 :(得分:1)
出现此错误的原因是,当您使用map时,它实际上将输出仅包含count值的数组
qc2.BinsByDayByOrchardsQCsDefects.map((qc3) => qc3.Count)
输出:
[2, 0, 2 , 1]
您应该先进行排序然后再映射,然后尝试另一种方法:
qc2.BinsByDayByOrchardsQCsDefects.sort((a, b) => a.Defect < b.Defect ? -1 : a.Defect > b.Defect ? 1: 0))).map((qc3) => qc3.Count);
此外,在这里您正在对字符串进行排序,所以我不确定这是否可以正常工作,但至少您不会收到有关该属性不存在的错误。
更新:
我在您的帖子中错过了您正在使用Typescript的方法,请尝试执行此操作以查看其是否如this post
所建议的那样起作用qc2.BinsByDayByOrchardsQCsDefects.sort((a, b) => a.Defect < b.Defect ? -1 : a.Defect > b.Defect ? 1: 0))).map((qc3) => (qc3 as any).Count);
另一个建议是尝试使用qc3["Count"]
而不是qc3.Count
,因为Typescript不能以某种方式感知到这一点……