【问题标题】:How to fix object auto reorder min to max in for (in) loop如何在for(in)循环中修复对象自动重新排序最小值到最大值
【发布时间】:2013-09-12 08:29:42
【问题描述】:

我的最终功能。

var timeToString = function(time)
{
    if (time <= 0)
    {
        return '0';
    }
    else
    {
        var s = '';
        var d;

        var dateObj = { '_86400' : 'วัน', '_3600' : 'ชั่วโมง', '_60' : 'นาที', '_1' : 'วินาที' };

        for ( key in dateObj )
        {
            console.log( time + ' ' + key )

            var suffix = dateObj[key];
            var totaltime = key;
            totaltime = totaltime.substr(1)

            if ( time >= totaltime )
            {
                time -= d = time - time % totaltime;
                s += ( ( d / totaltime) + ' ' + suffix + ' ');
            }
        }
    }
    return s;
}

document.write( timeToString(79) )

结果:1 นาที 19 วินาที

通过为我的对象的键值添加前缀来修复它,我的修复效果很好。

这是我的第一个代码

var timeToString = function(time)
{
    if (time <= 0)
    {
        return '0';
    }
    else
    {
        var s = '';
        var d;

        var dateObj = { '86400' : 'วัน', '3600' : 'ชั่วโมง', '60' : 'นาที', '1' : 'วินาที' };

        for ( key in dateObj )
        {
            var suffix = dateObj[key];
            var totaltime = parseInt(key);

            if ( time >= totaltime )
            {
                time -= d = time - time % totaltime;
                s += ( ( d / totaltime) + ' ' + suffix + ' ');
            }
        }
    }
    return s;
}

结果:79 วินาที

我不需要那样的显示。

结果:1 นาที 19 วินาที

没错。

看看两个函数之间“dateObj”的区别。

如果 key 的类型 == number,如何在 for in 循环中修复对象重新排序

【问题讨论】:

  • 哇,这个问题我什么都不懂……
  • var dateObj = { '_86400' : 'วัน', '_3600' : 'ชั่วโมง', '_60' : 'นาที', '_1' : 'วินา在 for in 循环中时,它首先显示“_86400”。 var dateObj = { '86400' : 'วัน', '3600' : 'ชั่วโมง', '60' : 'นาที', '1' : 'วินาที' };在 for in 循环中它首先显示“1”

标签: javascript for-loop for-in-loop


【解决方案1】:

据我了解,您需要格式化会议记录。 试试这个例子:

function formatTime(minutes) {
        var hh = Math.floor(minutes/60);
        var mm = minutes%60;
        var result = "";
        if (hh > 0)
            result += hh + " hours ";
        if (mm > 0)
            result += mm + " minutes";
        return result;
    }

然后调用:

console.log(formatTime(219));
// 3 hours 39 minutes

【讨论】:

  • 我需要知道为什么对象键在 for in 循环中重新排序
  • var dateObj = { '_86400' : 'วัน', '_3600' : 'ชั่วโมง', '_60' : 'นาที', '_1' : 'วินา在 for in 循环中时,它首先显示“_86400”,但是。 var dateObj = { '86400' : 'วัน', '3600' : 'ชั่วโมง', '60' : 'นาที', '1' : 'วินาที' };在 for in 循环中它首先显示“1”
  • 你不应该依赖 for in 循环中的排序。它可能因浏览器而异。
【解决方案2】:

在我看来问题实际上出在这条线上

 totaltime = totaltime.substr(1)

你改成

var totaltime = parseInt(key);

我不知道你想在这里比较什么,打赌这似乎是你做的两个完全不同的比较。确保您要比较什么以及如何进行比较。 time 是什么,谁寄的?你想如何比较整数和字符串?等等

【讨论】:

  • 我首先对 for in loop key index display 感到困惑
  • var dateObj = { '_86400' : 'วัน', '_3600' : 'ชั่วโมง', '_60' : 'นาที', '_1' : 'วินา和 dateObj = { '86400' : 'วัน', '3600' : 'ชั่วโมง', '60' : 'นาที', '1' : 'วินาที' };在for循环中
  • @MarosdeeUma 很抱歉,如果你不会用英语写作,我帮不了你
  • var dateObj = { '_86400' : 'Day', '_3600' : '小时', '_60' : '分钟', '_1' : '秒' };而 var dateObj = { '86400' : 'Day', '3600' : 'Hours', '60' : 'Minutes', '1' : 'Seconds' };对此感到抱歉
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
  • 2021-10-20
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
相关资源
最近更新 更多