Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.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中,减少文件名的最优化或最简单的方法是什么_Javascript_Optimization - Fatal编程技术网

在javascript中,减少文件名的最优化或最简单的方法是什么

在javascript中,减少文件名的最优化或最简单的方法是什么,javascript,optimization,Javascript,Optimization,我最近在javascript中创建了一个函数,该函数接受一个文件名和一个最大字符限制,结果需要遵循以下规则: 始终包括文件扩展名 如果发生收缩,请保持文件名的第一部分和最后一部分不变 始终将删除的字符替换为“…” 如果文件长度低于最大值,则不执行任何操作 您可以假定最大长度至少为5个字符 现在我已经解决了这个问题,但它让我思考是否有一种更优雅或更简单的方法可以在javascript中使用正则表达式或其他技术来实现这一点。这也给了我一个尝试的机会。考虑到这一点,我的功能如下: function

我最近在javascript中创建了一个函数,该函数接受一个文件名和一个最大字符限制,结果需要遵循以下规则:

  • 始终包括文件扩展名
  • 如果发生收缩,请保持文件名的第一部分和最后一部分不变
  • 始终将删除的字符替换为“…”
  • 如果文件长度低于最大值,则不执行任何操作
  • 您可以假定最大长度至少为5个字符
现在我已经解决了这个问题,但它让我思考是否有一种更优雅或更简单的方法可以在javascript中使用正则表达式或其他技术来实现这一点。这也给了我一个尝试的机会。考虑到这一点,我的功能如下:

function ReduceFileName(name, max){        
if(name.length > max){        
    var end = name.substring(name.lastIndexOf('.'));
    var begin = name.substring(0, name.lastIndexOf('.'));
    max = max - end.length - 3;
    begin = begin.substr(0,max/2) + '...' + begin.substr(begin.length-(max/2) , max/2 + 1);
    return begin + end;        
}    
return name;
}

这里是

我不确定正则表达式是否一定会更优雅,但到目前为止,我提出了以下通过测试的方法:

function ReduceFileName(name, max){        
    if(name.length > max) {
        var ell ="\u2026"; // defines replacement characters
        var ext = (/\.[^\.]*$/.exec(name) || [""])[0]; // gets extension (with dot) or "" if no dot
        var m = (max-ell.length-ext.length)/2; // splits the remaining # of characters
        var a = Math.ceil(m);
        var z = Math.floor(m);
        var regex = new RegExp("^(.{"+a+"}).*(.{"+z+"})"+ext, "");
        var ret = regex.exec(name);
        return ret[1]+ell+ret[2]+ext;
    }
    return name;
}

因为我在这方面没有太多的活动,我认为没有更好的方法来做这件事,所以我会把我的方法当作答案,直到别人想出其他的东西。

function ReduceFileName(name, max){        
if(name.length > max){        
    var end = name.substring(name.lastIndexOf('.'));
    var begin = name.substring(0, name.lastIndexOf('.'));
    max = max - end.length - 3;
    begin = begin.substr(0,max/2) + '...' + begin.substr(begin.length-(max/2) , max/2 + 1);
    return begin + end;        
}    
return name;
}

一点小小的注释:您可以将“…”替换为省略号“…”,省略号应该只使用一个字符而不是三个字符。Unicode代码(听起来是多余的,不是吗?)是2026,所以在Javascript中为“\u2026”。它是
&hellip