如果item已经是数组,请移到前面?

时间:2014-03-02 18:02:24

标签: javascript html arrays

我的功能会停止将相同ID添加到历史记录中的视频,但我如何才能将视频移到前面。

因此它基本上要么将数组重新排序到最后一次观看,要么将视频添加到数组中。

function watch(video) {
    if ($.grep(myhistory, function (item) {
        return item["id"] == video["id"];
    }).length == 0) {
        document.location.hash = "!track=" + video["id"];
        updateHistory(video);
    }
    updateFavourite(video);

    $("#shareitlink").val("http://shuzel.com/#!track=" + video["id"]);
    document.title = "SHUZEL | " + video["title"];
    var html = "<b>{0}</b><br>by {1}<br>{2} | {3} views";
    $("#videoInfo").html(html.format(video["title"], video["uploader"], video["length"], video["views"]));
    ytplayer.loadVideoById(video["id"]);
    getRelated(video["id"], true);
    return false;
}

function updateHistory(video) {
    blacklist[video["id"]] = true;
    myhistory.push(video);
    var html = "<li class=\"saved\">" + "<img class= \"img-rounded\" src=\"{0}\"/>" + "<p><b title=\"{2}\"><a class=\"extendedLink\" href=\"javascript:watchHistoricVideo(\'{1}\');\"><span></span>{2}</a></b><br>" + "by {3}<br>" + "{4} | {5} views</p>" + "</li>";
    $("#myhistory").prepend(html.format(video["thumbnail"], video["id"], video["title"], video["uploader"], video["length"], video["views"]));
    setVideo(video);
}

提前致谢。

4 个答案:

答案 0 :(得分:0)

取决于您的电影数组,例如:

var array = ["one", "two", "three"]

您可以检查当前电影是否在数组中,如果是,splice然后unshift将其放在前面,例如:

var array = ["one", "two", "three"],
    i = array.indexOf("three"),
    temp = array[i];
if (i > -1) {
    array.splice(i, 1);
    array.unshift(temp);
}

Example

您的代码非常密集,因此您需要确定在何处实现代码。

答案 1 :(得分:0)

// do whatever logic you have to get index of 
// array element to move to front. Using i=1 as example
var i = 1; 


// example array to affect
var array = ['a','b','c'];

// remove element i (2nd element) and add as first element
array.unshift(array.splice(i,1)[0]);

// array is now ['b','a','c']

答案 2 :(得分:0)

array.indexOf会告诉你它是一个数组,如果在数组中则返回项索引,否则返回-1。

indexOf不能用作IE8或ealier的方法,在这种情况下添加以下内容

if(!Array.indexOf){
        Array.prototype.indexOf = function(obj){
            for(var i=0; i<this.length; i++){
                if(this[i]===obj){
                    return i;
                }
            }
            return -1;
        }
    }

如果不在数组中,那么Crayon Violet建议使用array.unshift添加到数组的前面。

如果在数组中,Crayon Violet建议使用array.slice(index,1)删除item,并使用array.unshift添加到数组的前面。

答案 3 :(得分:0)

http://jsfiddle.net/Cj4Ub/

Array.prototype.addRecent = function(item){
    var index = this.indexOf(item);
    this.unshift(index > -1 ? this.splice(index, 1)[0] : item);
    return this;
};

alert([].addRecent("a").addRecent("b").addRecent("c").addRecent("b"));