Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否在一行中修改Array.shift()和值?_Javascript_Arrays_Refactoring - Fatal编程技术网

Javascript 是否在一行中修改Array.shift()和值?

Javascript 是否在一行中修改Array.shift()和值?,javascript,arrays,refactoring,Javascript,Arrays,Refactoring,此Javascript代码从文件列表中删除第一个文件名,然后删除其扩展名: var fileNoExt = filelist.shift(); fileNoExt = fileNoExt.substr(0, fileNoExt.lastIndexOf('.')); 我很好奇-是否可以将此代码转换为一行程序?以下是一行程序: var filelist = ['file.name.ext', 'some.another.string'] filelist.shift().split('.').s

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

var fileNoExt = filelist.shift();
fileNoExt = fileNoExt.substr(0, fileNoExt.lastIndexOf('.'));
我很好奇-是否可以将此代码转换为一行程序?

以下是一行程序:

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

filelist.shift().split('.').slice(0, -1).join('.') // 'file.name'
这是一条单行线:

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

filelist.shift().split('.').slice(0, -1).join('.') // 'file.name'
“是否可以将此代码转换为一行程序?”

但是为什么呢?有两行比较清楚

“是否可以将此代码转换为一行程序?”


但是为什么呢?有两行更清楚。

使用正则表达式怎么样

如果要在
之后强制执行扩展,请使用

var fileNoExt = filelist.shift().replace(/\.[^.]+$/, '');
否则,请使用

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

第二个匹配
我的疯狂文件。
我的疯狂文件.extension
,而第一个只匹配
我的疯狂文件.extension

使用正则表达式怎么样

如果要在
之后强制执行扩展,请使用

var fileNoExt = filelist.shift().replace(/\.[^.]+$/, '');
否则,请使用

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

第二个匹配
我的疯狂文件。
我的疯狂文件.extension
,而第一个只匹配
我的疯狂文件.extension

你甚至可以像
var fileNoExt=(函数(a){返回a.substr(0,a.lastIndexOf('.');}(filelist.shift())一样疯狂可读吗?不,可能吗?是的。我想如果没有找到点,删除最后一个字符的行为是不需要的?下面的每一个答案都处理不同的情况,所以选择正确的一个:-)@FelixKling确实这是一个激进的方法;)@Bergi这不是一个要求,因为脚本读取的文件列表总是有扩展名。您甚至可以像
var fileNoExt=(函数(a){返回a.substr(0,a.lastIndexOf('.');}(filelist.shift())可读吗?不,可能吗?是的。我想如果没有找到点,删除最后一个字符的行为是不需要的?下面的每一个答案都处理不同的情况,所以选择正确的一个:-)@FelixKling确实这是一个激进的方法;)@Bergi这不是一个要求,因为脚本读取的文件列表总是有扩展名“我知道,我会使用正则表达式”:@Sergio:但它在这里是一个有效的用例,可能比数组拆分连接更快solution@Bergi:大概吧。我不喜欢正则表达式的地方在于它们几乎都是只写的。当你写的时候,你知道他们在做什么。一周后你会看到其中一个,你必须破译它们的内容。或者也许我对正则表达式的使用有那么差。@Sergio:取决于表达式的复杂程度;)这一条很简单。@Bergi我很欣赏编辑,但是如果我们真的想删除扩展,你的建议最后还包括删除
?示例:
myu-bad\u文件名。
vs
myu-file\u具有健全的扩展名
?在第一种情况下没有扩展。“我知道,我会使用正则表达式”:@Sergio:但它在这里是一个有效的用例,可能比数组拆分联接更快solution@Bergi:大概吧。我不喜欢正则表达式的地方在于它们几乎都是只写的。当你写的时候,你知道他们在做什么。一周后你会看到其中一个,你必须破译它们的内容。或者也许我对正则表达式的使用有那么差。@Sergio:取决于表达式的复杂程度;)这一条很简单。@Bergi我很欣赏编辑,但是如果我们真的想删除扩展,你的建议最后还包括删除
?示例:
myu-bad\u文件名。
vs
myu-file\u具有健全的扩展名
?第一种情况没有延伸,我很喜欢。这真是“在你脸上”。残酷的你太棒了,我喜欢这个。这真是“在你脸上”。残酷的你太棒了。