2016-06-21 31 views
-3

请我想检查一下这个字符串是否被排序?检查一个字符串是否在javascript中排序

var myBucket = "1D2D1W2W1M2M3M4M5M6M9M1Y18M2Y30M3Y4Y5Y6Y8Y10Y15Y20Y25Y30Y1D2D1W2W1M2M3M4M5M6M9M1Y18M2Y30M3Y4Y5Y6Y8Y10Y15Y20Y25Y30Y";


1D=One Day 2D=2 Day ... 
1W=1 Week 
1M=1 Months 18M=18 Months 
1Y=1 years 
like 1D<2D<1W<3W<1M<10M<1Y<18M<2Y ... 

我如何检查呢?

预先感谢您。

+2

BRB要做的功课你 –

+3

不是最伟大的方式来在社区开始。请研究关于发布问题的规则 – JohnPan

+1

严肃地说,一种可能的解决方案是迭代字符串。抓住数字然后写出字母。将数字转换为整数。使用字母和数字,生成天数(例如1Y = 365D)。然后对当前项目与前一项目进行比较(当然,第一次迭代除外)。 –

回答

0

我建议匹配一个数字和长度指示。然后用Array#every循环并将零件拆分为数字和长度指示器。使用哈希表的长度,您可以计算长度并使用之前的最后一个值进行测试。

如果更大,那么继续,否则离开循环,并得到false

如果循环遍历所有元素,并且回调返回true,则返回true

var myBucket = '1D2D1W2W1M2M3M4M5M6M9M1Y18M2Y30M3Y4Y5Y6Y8Y10Y15Y20Y25Y30Y1D2D1W2W1M2M3M4M5M6M9M1Y18M2Y30M3Y4Y5Y6Y8Y10Y15Y20Y25Y30Y', 
 
    values = { D: 1, W: 7, M: 30, Y: 365 }, 
 
    result = myBucket.match(/\d+[DWMY]/g).every(function (a, i) { 
 
     var p = a.split(/(?=[DWMY])/), 
 
      value = p[0] * (values[p[1]] || 0); 
 
     if (value > this.last) { 
 
      this.last = value; 
 
      return true; 
 
     } 
 
    }, { last: -Infinity }); 
 

 
console.log(result);

相关问题