数组中的上一个或下一个元素基于字符串" direction"

时间:2015-04-26 14:06:17

标签: javascript arrays

我试图根据参数" direction"创建将返回数组中下一个或上一个项目的函数。 例如,我有阵列= [' ferrari',' bmw',' merc',' bugatti']我想要我的功能返回' bugatti' IF currentPointer =' ferrari'和方向='左'

nextPrev(数组,方向,currentPointer)

在php中我们有函数next()来移动内部指针......但是我不知道如何在javascript中执行它...

3 个答案:

答案 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)

尝试这样的事情。

使用数组的数字位置并有条件地循环:

&#13;
&#13;
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;
&#13;
&#13;