0

我已经有一个文件夹,其中的文件具有以下特定格式的名称,即 MODEL_RELEASEDATE

名为Smartphone的文件夹中的文件名

SmartphoneA_11122012
SmartphoneA_01022013
SmartphoneA_09102013
SmartphoneA_10072012
SmartphoneA_12042012
**SmartphoneB_08282013**
SmartphoneB_04152013
SmartphoneB_08282012
SmartphoneB_01062013
.
.
.
.
and so on

我想编写一个 jquery 代码,我可以使用格式中的特定关键字,从上面的列表中,我将传递值SmartphoneA,我应该能够读取具有最新发布日期的文件。与我传递关键字SmartphoneB时的情况相同。

如果我通过 k/w SmartphoneB,结果应该从上面突出显示的文件中提供,即SmartphoneB_08282013

我当前的代码仅使用特定的 k/w 读取文件名。我几乎没有什么改动要做。

<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
    var metaKeywords=$('meta[name=keywords]').attr("content");//this utility works based upon the keywords on the pages.
    var reqdKeyword = new Array();
    reqdKeyword  = metaKeywords.split(",");
    var randKeyword = reqdKeyword[Math.floor(Math.random() * reqdKeyword.length)];
    var cdnUrl = "http://abc.com/xyz/mobiles/";
    var jsnUrl = ".json?callback=showDetail";
    var finalUrl= cdnUrl.concat(randKeyword.trim()).concat(jsnUrl);


    /*

           Rest of the code goes here

    */


</script>
4

2 回答 2

1

日期很酷的一点是,如果您将日期按“降序”顺序(即年月日小时秒),您可以轻松地对它们进行排序。使用它,我们可以浏览您的文件以仅获取以正确前缀开头的文件,然后轻松获取最新的文件:

var filenames = [
        'SmartphoneA_11122012',
        'SmartphoneA_01022013',
        'SmartphoneA_09102013',
        'SmartphoneA_10072012',
        'SmartphoneA_12042012',
        'SmartphoneB_08282013',
        'SmartphoneB_04152013',
        'SmartphoneB_08282012',
        'SmartphoneB_01062013'
    ],
    whichPhone = 'SmartphoneB', // Dummy value, this would come from user interaction or whatever
    possibleFiles = [];

// This goes through your list of filenames and picks out just the ones that match `whichPhone`, then puts them into another array containing a "cleaned-up" date and some other metadata-esque stuff
for (var i = 0, j = filenames.length; i < j; i++) {
    var filename = filenames[i];

    if (filename.indexOf(whichPhone) > -1) {
        possibleFiles.push({
            index: i,
            filename: filename,
            date: parseInt(filename.split('_')[1].replace(/(\d{2})(\d{2})(\d{4})/, function(match, month, day, year) {
                return year + month + day;
            }), 10)
        });
    }
}

// Now we go through the `possibleFiles` and figure out which one has the latest date
var latestFileDate = 0,
    theActualFilenameYouWantFinally;

for (var i = 0, j = possibleFiles.length; i < j; i++) {
    var possibleFile = possibleFiles[i];

    if (possibleFile.date > latestFileDate) {
        latestFileDate = possibleFile.date;
        theActualFilenameYouWantFinally = filenames[possibleFile.index];
    }
}

// And, finally, your result
console.log(theActualFilenameYouWantFinally);

编辑:我没有使用 jQuery 来回答这个问题,因为嗯,你真的不需要 jQuery 来做这样的事情。不要误会我的意思,John Resig 非常出色,我几乎在所有事情中都使用 jQuery,但是for循环非常快速且易于使用,而且这样的东西无论如何都不是 jQuery 的强项。

于 2013-08-28T06:48:29.603 回答
0

您将需要一个服务器端代码来为您返回一个 URI(文件名)列表,然后您可以编写 JavaScript 代码来解析它(但在这种情况下,如果您的服务器端代码将返回正确的名称可能会更好离开基于查询字符串)。在最坏的情况下,您可以在服务器上放置一个 dir.txt 文件,该文件将列出该文件夹中的所有文件,例如运行 cron 作业以根据需要对其进行更新。

jQuery 将无法列出服务器上的远程文件,除非您的服务器以一种或另一种方式支持它。

更新

获得所需文件后:

a)将其标记为一个数组,例如像这样

 var names = dir.split("\n"); 

b) 只保留以关键字开头的字符串并切断关键字

 names = $(names).map(function(n,i) { 
    return (n.indexOf(keyword) == 0) ?  n.split('_')[1] : null;
 }).get();

现在你有一个像这样的数组 ['11122012', '01022013', ...]

c) 在这个数组中找到最大日期

var dateNum = Math.max.apply( null,
  $.map(names,function(n,i){ return parseInt(
    n.replace(/(\d{2})(\d{2})(\d{4})/, function(match, month, day, year) {
            return year + month + day;
        })) 
  }) );
var maxDate = dateNum.toString().replace(/(\d{4})(\d{2})(\d{2})/,
         function (match, year, month, day) { return month + day + year; }
       );
var fileName = keyword + "_" + maxDate;

瞧,您的文件名包含最大日期的名称。

还有其他方法可以做到这一点,例如将日期真正解析为 Date 对象。此外,您可以简单地迭代文件一次,无需数组映射和 Math.max() 迭代器。由于这里的代码量胜过速度,因此找到最佳代码取决于您可以在哪里重复使用它的点点滴滴,而不会影响可维护性。

http://jsfiddle.net/Exceeder/VLB2E/

于 2013-08-28T06:06:35.307 回答