Моя функция останавливает видео с тем же идентификатором, который добавляется в историю, но как бы я это сделал, вместо этого он перемещает видео вперед.
Таким образом, он по существу либо переупорядочивает массив до последнего наблюдаемого, либо добавляет видео в массив.
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);
}
Заранее спасибо.
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"));
В зависимости от вашего множества фильмов, таких как:
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);
}
Ваш код ужасно плотный, так что вам решать, где реализовать код.
// 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']
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 для добавления к фронту массива.
array.slice()
,array.splice()
иarray.unshift()
. Дайте нам знать, если у вас есть проблемы