Array.shift()并在一行中修改值?

时间:2013-06-04 23:05:02

标签: javascript arrays refactoring

此Javascript代码从文件列表中删除第一个文件名,然后删除其扩展名:

var fileNoExt = filelist.shift();
fileNoExt = fileNoExt.substr(0, fileNoExt.lastIndexOf('.'));

我很好奇 - 是否可以将此代码转换为单行代码?

3 个答案:

答案 0 :(得分:3)

这是一个单行:

var filelist = ['file.name.ext', 'some.another.string']

filelist.shift().split('.').slice(0, -1).join('.') // 'file.name'

答案 1 :(得分:3)

使用正则表达式怎么样?

如果您想在.之后强制执行扩展程序,请使用

var fileNoExt = filelist.shift().replace(/\.[^.]+$/, '');

否则,请使用

var fileNoExt = filelist.shift().replace(/\.[^.]*$/, '');

第二个匹配my_crazy_file.my_crazy_file.extension,而第一个匹配my_crazy_file.extension

答案 2 :(得分:1)

  

"是否可以将此代码转换为一行代码?"

是,

var fileNoExt = filelist[0].substr(0, filelist.shift().lastIndexOf('.'));

但为什么呢?它在两条线上更清晰。