我试图根据参数" direction"创建将返回数组中下一个或上一个项目的函数。 例如,我有阵列= [' ferrari',' bmw',' merc',' bugatti']我想要我的功能返回' bugatti' IF currentPointer =' ferrari'和方向='左'
nextPrev(数组,方向,currentPointer)
在php中我们有函数next()来移动内部指针......但是我不知道如何在javascript中执行它...
答案 0 :(得分:1)
基本理念是:
function urlQueryString(parameter, value) {
var url = window.location.href;
var regex = new RegExp("([?&])" + parameter + "=.*?(&|#|$)(.*)", "gi"),
hash;
if (regex.test(url)) {
if (typeof value !== 'undefined' && value !== null)
window.location = url.replace(regex, '$1' + parameter + "=" + value + '$2$3');
else {
hash = url.split('#');
url = hash[0].replace(regex, '$1$3').replace(/(&|\?)$/, '');
if (typeof hash[1] !== 'undefined' && hash[1] !== null)
url += '#' + hash[1];
window.location = url;
}
}
else {
if (typeof value !== 'undefined' && value !== null) {
var separator = url.indexOf('?') !== -1 ? '&' : '?';
hash = url.split('#');
url = hash[0] + separator + parameter + '=' + value;
if (typeof hash[1] !== 'undefined' && hash[1] !== null)
url += '#' + hash[1];
window.location = url;
}
else
window.location = url;
}
}
您可以稍微重新组织一下:
function nextPrev(array, direction, currentPointer) {
var index = array.indexOf(currentPointer);
if (direction=="left") {
return array[index == 0 ? array.length-1 : index-1];
} else if (direction=="right") {
return array[index == array.length-1 ? 0 : index+1];
} else {
// default action or throw error
}
}
您可能希望添加function nextPrev(array, direction, currentPointer) {
var index = array.indexOf(currentPointer);
var len = array.length;
if (direction=="left") {
index--;
} else if (direction=="right") {
index++
} else {
// default action or throw error
}
return array[(index + len) % len];
}
返回有效索引的检查(如果array.indexOf
包含的内容不在currentPointer
中)。
答案 1 :(得分:1)
你可以这样写:
function makeDirectionalIterator(array){
var currIndex = 0;
return {
nextPrev: function(direction){
if(direction === 'left') {
return currIndex < array.length-1 ?
{value: array[++currIndex], done: false} :
{done: true};
}
else {
return currIndex > 0 ?
{value: array[--currIndex], done: false} :
{done: true};
}
},
current: function() {
return { value: array[currIndex] };
}
}
}
然后您可以像以下
一样使用它var itr = makeDirectionalIterator(array);
itr.current().value;
itr.nextPrev('left').value;
itr.nextPrev('left').done;
答案 2 :(得分:1)
尝试这样的事情。
使用数组的数字位置并有条件地循环:
var array = ['ferrari', 'bmw', 'merc', 'bugatti'];
var returnedElement = nextPrev(array, "left", "ferrari");
// Show Returned Value (Console)
console.log(returnedElement);
function nextPrev(array, direction, currentPointer) {
var arraySize = array.length - 1;
var currentIndex = array.indexOf(currentPointer);
if (direction === "left") {
// Decrease array by one
if (currentIndex == 0) {
// Return Previous (Max Array)
return array[arraySize]
} else {
return array[currentIndex - 1]
}
} else if (direction === "right") {
// Increase array by one
if (currentIndex == arraySize) {
// Go to zero position
return array[0]
} else {
return array[currentIndex + 1]
}
} else {
console.log("Use either 'left' or 'right'");
}
}
&#13;