无法对数组中的数据进行排序。排序不是一个函数

我正在尝试对数组中的数据进行从小到大的排序。我收到错误:time.sort不是函数,time.sort是undefined。


这是我的代码:


{

    this.state.measure.map((data, index) => {

        let time = data.duration

        const totalTime = time.sort((a, b) => parseFloat(a.time) - parseFloat(b.time))

        console.log(totalTime)

    })

}

                        

如果我 console.log(time) 我收到 15:00, 12:00, 50:00, 15:10 这是我想要排序的数据,但首先我需要使用 parseFloat() 转换为数字,然后使用去订吧,反正这不是问题。看来这sort()是我的代码中的问题。这是我的 JSON。


{

  "measures": [

    {

      "_id": "5fb56d5e734b7e04b9c97c9d",

      "creationDate": "18/11/2020",

      "startTime": "10:00",

      "duration": "15:00",

      "voltage": "220V",

      "avgPower": "34W",

      "maxPower": "7200W",

      "WaterConsumption": "30",

      "avgTemperature": "42",

      "maxTemperature": "48",

      "shower": "5fb56ce7734b7e04b9c97c9b",

      "__v": 0,

      "id": "5fb56d5e734b7e04b9c97c9d"

    },

  ]

}

我有三个像这样的物体,我只想将它们从小到大排序。


我尝试将代码更改为


{this.state.measure.map((data, index)=> {

    let time = parseFloat(data.duration)

    console.log(time)

})}

现在我收到 15, 12, 50, 17.1


慕哥9229398
浏览 77回答 4
4回答

互换的青春

如果我没记错的话,那么你想要的是这样的东西——const data = {  "measures": [    {      "_id": "5fbaaa",      "duration": "15:00",    },    {      "_id": "5fbbdd",      "duration": "12:20",    },    {      "_id": "5fbbbb",      "duration": "12:00",    },    {      "_id": "5fbccc",      "duration": "25:30",    },  ]};const inMin = (duration) => {  const [hour, min] = duration.split(':');  return hour * 60 + min * 1;}data.measures.sort((a, b) => {  return inMin(b.duration) - inMin(a.duration);});console.log(data);在这里,我缩短了您的数据结构,并假定您的持续时间HH:mm格式,并将持续时间以分钟为单位转换并按顺序排序desc。

幕布斯6054654

好吧,听起来你想对数组进行排序。为此,您应该使用该Array.sort方法而不是Array.map.下面的代码将对比较duration值的数组进行排序。String.localeCompare是一个方便的函数,因为它已经为您转换了日期。this.state.measures.sort((a,b) => a.duration.localeCompare(b.duration))

心有法竹

您应该measures对数组进行排序。this.state.measure.sort((a,b)=>{   const [m, s] = a.time.split(":").map(Number), [m2, s2] = b.time.split(":").map(Number);   return m * 60 + s - (m2 * 60 + s2);});

MMTTMM

因为时间格式是字符串,并且在使用 parseFloat 之前有 : 只需执行 time.split(':').join('.')this.state.measure.map((data, index) => {        let time = data.duration        const totalTime = time.sort((a, b) => parseFloat(a.time.split(':').join('.') )- parseFloat(b.time.split(':').join('.')))        console.log(totalTime)})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript