字符串分割并获取第一个和最后一个出现的位置

20

我有一个长的 ISO 日期字符串:

var str = "'2012-11-10T00:00:00.000Z', '2012-11-11T00:00:00.000Z', ****  '2013-11-12T00:00:00.000Z'";
我只需要获取第一个和最后一个日期。我可以这样做:
var vStr = str.split(',');
vStr[0] and vStr[vStr.length - 1]

但这浪费了内存,因为我只需要第一次和最后一次出现的位置。有什么好的想法吗?谢谢。


6
为什么会浪费内存呢?这似乎是一个不错的方法,但你可以使用shift()pop()从数组中获取第一个和最后一个元素。这种方法在客户端计算机上可能只使用了0.00000000000000000001%的内存,所以不用担心。 - adeneo
7
这句话的意思是取一个字符串(vStr)的最后一个字符,可以翻译为“取 vStr 字符串的最后一个字符,代码为 vStr[vStr.length - 1]”。 - Pointy
1
你的字符串并不是很“长”,因此它不会占用太多内存... - Zong
如果您担心内存(虽然这不是问题),您可以重复使用 str 进行分割 - str = str.split(','); (假设您不需要再次使用它)。不要忘记您可能还需要修剪 shift()pop() 中的空格。 - David Gard
4个回答

16
如果你真的因为大数组而遇到性能问题(不要过早优化),你可以使用slice来提取单个字符串,使用indexOf/lastIndexOf来找到它们的位置。
str.slice(0, str.indexOf(','))

并且

str.slice(str.lastIndexOf(',')+1) // 1==','.length

9

实际上,这并不会浪费太多空间,因为 Javascript 占用电脑内存非常少。除非字符串非常长达到了几 GB,否则您不需要担心它。要获取第一个和最后一个,只需执行以下操作:

arr=str.split(',');
var first=arr.shift(); //or arr[arr.length-1];
var last=arr.pop(); //or arr[0];

为什么要改变数组?这可能比获取第一个和最后一个索引要低效。 - Bergi
3
以上示例中的注释似乎相反,因为 shift() 返回 arr[0],而 pop() 返回数组中的最后一个元素。 - ttemple

2

我有一长串ISO日期

假设这些日期都使用时区Z,年份 >= 0,并且间隔和引用方式相同,你甚至不需要搜索,,因为它们的长度将是相同的。

var first = str.slice(1, 25),
    last = str.slice(-25, -1);

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接