Если элемент уже массив, переместиться вперед?

0

Моя функция останавливает видео с тем же идентификатором, который добавляется в историю, но как бы я это сделал, вместо этого он перемещает видео вперед.

Таким образом, он по существу либо переупорядочивает массив до последнего наблюдаемого, либо добавляет видео в массив.

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);
}

Заранее спасибо.

  • 0
    Вы захотите использовать array.slice() , array.splice() и array.unshift() . Дайте нам знать, если у вас есть проблемы
Теги:
arrays

4 ответа

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"));
0

В зависимости от вашего множества фильмов, таких как:

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

Вы можете проверить, находится ли текущий фильм в массиве, и если это так, splice его, а затем unshift его на передний unshift с чем-то вроде:

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

пример

Ваш код ужасно плотный, так что вам решать, где реализовать код.

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']
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 для добавления к фронту массива.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню