2016-07-31 75 views
1

我有一个名为clickNext()的函数按钮。无论何时点击该按钮,它都会在名为“arr1”的数组上增加索引位置(scope.selected)。如何更改数组的索引顺序?

<button type="button" class="right-btn col-xs-6" role="menuitem" ng-click="clickNext()">Next</button> 

function clickNext() 
     { 
      scope.selected = (scope.selected + 1) % length; 
     } 


arr1 = [ 
     {apple: 1 , tango}, 
     {banana: 3, kappa}, 
     {orange:5, alpha}, 
     {apple: 8 , beta}, 
     {grape: 10 , sigma} 
     ] 

问题

我具有相同的阵列ARR1称为 'ARR2'。我想要做的是将clickNext()增量到基于arr2数组而不是arr1数组的下一个索引位置。

现在,clickNext函数仍然按照arr1数组的顺序递增。例如,如果我按一下按钮,就开始橙色:5然后移动到苹果8等

arr2 = [ 
     {orange:5, alpha}, 
     {apple: 8 , beta}, 
     {banana: 3, kappa}, 
     {grape: 10 , sigma}, 
     {apple: 1 , tango} 
     ] 

我已经试过 我的思想过程中完成,这是使用findIndex()函数并将arr2项目与arr1项目相匹配。这不起作用,但也许我构思错了?

clickNext(){ 
    var oldIndex = filteredToXs(scope.selected); 
    scope.selected = oldIndex + 1;} 

function filteredToXs(filteredIndex) { 
    var firstArr = scope.arr1[ filteredIndex ]; 
    var xsIndex = scope.arr2.findIndex(function(item) { 
    return item.trackingNumber === firstArr.trackingNumber; 
}); 
if(xsIndex >= 0) return xsIndex; 
if(xsIndex === -1) return 0; // Default value 
} 
+0

为什么你不只是用我听不懂第二个数组直接。试图在它们之间交叉引用的期望好处是什么? – nnnnnn

+0

为了简单起见,在示例中。它在代码中被映射出来,但为了引用目的,数组必须是分开的。 –

回答

1

我希望我能正确理解你的问题。请在代码部分阅读我的评论。

我不得不修改你的源代码,所以我能够为你创建一个小提琴。

HTML:我改变了点击事件,并删除CSS类,这不是可用

<button type="button" role="menuitem" onclick="clickNext();">Next</button> 

SAMPE阵列: 它们含有无效对象:我改变了α,β,探戈,..一个属性。您也可以将它们定义为值..这不应该的问题:

var arr1 = [ 
    { apple: 1, tango: '' }, 
    { banana: 3, kappa: '' }, 
    { orange: 5, alpha: '' }, 
    { apple: 8, beta: '' }, 
    { grape: 10, sigma: '' }]; 

var arr2 = [ 
    { orange: 5, alpha: '' }, 
    { apple: 8, beta: '' }, 
    { banana: 3, kappa: '' }, 
    { grape: 10, sigma: '' }, 
    { apple: 1, tango: '' }]; 

代码:

var idx = 0; //save current index of array 2 

function clickNext() { 
    idx++; 

    //I'm comparing the array objects using a string compare- this only works because you said 'I have an identical array' 
    //this may cause issues if you're objects are cross-referenced 
    var find = function(array, obj) { //lookup value from arr2 in arr1 
     for (var i=0, l=array.length;i<l;i++) 
      if (JSON.stringify(array[i]) == JSON.stringify(obj)) //adjust this line to your needs 
       return array[i]; 
    } 
    var result = find(arr1, arr2[idx]) 
    if (!result) 
     throw new Error('not found- your arrays are not identical or you run out of index'); 
    console.log(result); 
} 

小提琴:https://jsfiddle.net/k50y8pp5/