使用JQuery从文件夹中读取带有最新日期的文件

时间:2013-08-28 05:52:22

标签: javascript jquery arrays sorting

我已经有了一个文件夹,其中的文件名称如下,具体格式为MODEL_RELEASEDATE

名为智能手机

的文件夹中的文件名
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>

2 个答案:

答案 0 :(得分: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来回答这个问题,因为meh,你真的不需要jQuery来做这样的事情。不要误会我的意思,John Resig非常出色,我几乎在所有方面都使用jQuery,但是for循环很快就很容易使用,而这样的东西无论如何都不是jQuery的强项。 / p>

答案 1 :(得分:0)

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

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;

瞧,你的fileName包含最大日期的名称。

还有其他方法,例如:真正将日期解析为Date对象。此外,您只需迭代文件一次,无需数组映射和Math.max()迭代器。由于代码量超过速度,因此找到最佳代码取决于您可以在不影响可维护性的情况下重新使用其零碎的位置。

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