为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕哥9229398 2023-12-14 17:04:51
我正在尝试对数组中的数据进行从小到大的排序。我收到错误: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
查看完整描述

4 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

如果我没记错的话,那么你想要的是这样的东西——


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



查看完整回答
反对 回复 2023-12-14
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

好吧,听起来你想对数组进行排序。为此,您应该使用该Array.sort方法而不是Array.map.

下面的代码将对比较duration值的数组进行排序。String.localeCompare是一个方便的函数,因为它已经为您转换了日期。

this.state.measures.sort((a,b) => a.duration.localeCompare(b.duration))


查看完整回答
反对 回复 2023-12-14
?
心有法竹

TA贡献1866条经验 获得超5个赞

您应该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);

});


查看完整回答
反对 回复 2023-12-14
?
MMTTMM

TA贡献1869条经验 获得超4个赞

因为时间格式是字符串,并且在使用 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)

})


查看完整回答
反对 回复 2023-12-14
  • 4 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信