【发布时间】:2020-02-25 10:34:57
【问题描述】:
我想知道如何在 JS 中修剪文件名以在一定数量的字符后显示“...”或任何附件,这是处理所有可能的测试用例的最有效方法。
规则
- 显示实际的文件扩展名,而不是用“.”分割字符串名称后的最后一个字符
- 该函数应以输入文件名(字符串)、要修剪的字符数(整数)和附录(字符串)作为参数。
- 高效,我的意思是我希望编写更少的代码行并处理所有可能的边缘情况。
示例输入
- myAwesomeFile.min.css
- 我的真棒文件.tar.gz
- 文件.png
预期输出(比如说我想在 5 个字符后修剪)
- myAwe....min.css
- 我的 Aw....tar.gz
- 文件.png
编辑问题以展示我的尝试
function trimFileName(str, noOfChars, appendix) {
let nameArray = str.split(".");
let fileType = `.${nameArray.pop()}`;
let fileName = nameArray.join(" ");
if (fileName.length >= noOfChars) {
fileName = fileName.substr(0, noOfChars) + appendix;
};
return (fileName + fileType);
}
console.log(trimFileName("myAwesomeFile.min.css", 5, "..."));
console.log(trimFileName("my Awesome File.tar.gz", 5, "..."));
console.log(trimFileName("file.png", 5, "..."));
编辑#2:如果您认为这不是标准预期,请随时继续编辑问题,并在示例输入和预期输出中添加更多边缘情况。
编辑#3:在新 cmets 之后为问题添加了更多细节。我知道我的尝试没有达到我的预期输出(我不确定我上面列出的输出是否是标准预期)。
编辑#4(最终版):删除了在 cmets 连续反弹后中间不断字的规则,并更改了规则以迎合更现实和实际的用例。
【问题讨论】:
-
您有很多案例,甚至没有尝试完成其中一个?更不用说您正在寻找最有效的方法,而您还没有向我们展示您尝试过的方法。
-
这真的不清楚你要做什么......预期的输出不一致,根本不符合“我想在 5 个字符后修剪”的描述。请给出具体的例子并展示你尝试过的内容
-
您以什么指标衡量“最有效”?
-
你试过什么代码?这实际上只是死记硬背的字符串处理。没有任何神奇的捷径。决定你想用什么算法来决定你想在哪里闯入
...,然后编写代码来实现那个算法。此外,大多数像这样的修剪操作都会给自己一个最大数量的字符,它们将允许它们保持不间断,因为通常这样做的全部目的是将字符串的一些缩写表示适合预定义的空间。所以,在你的 #2 案例中,如果你根本不破坏它,它就会违背典型的目的。 -
我仍然不清楚收缩规则是什么。避免分解成部分的算法被认为是“一个词”?如果你在一个词内停下来会发生什么——你是展示整个事情还是隐藏它?这取决于职位吗?如果它是名称中的第一个单词,似乎您想显示整个单词,但如果它是第二个单词,则隐藏它。但是如果是第三个呢?
my.w.another_word?另外,您是要实际 文件扩展名检查还是只需要足够接近(.tar.gz被视为.tar?
标签: javascript string file ecmascript-6