遍历一个prop,但按另一个prop排序React JS

时间:2019-04-30 02:25:25

标签: javascript arrays reactjs typescript sorting

我有这个函数,可以按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 }[] }[]

1 个答案:

答案 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不能以某种方式感知到这一点……