如何重新排序重复/映射数组的索引位置?

时间:2016-07-30 20:46:29

标签: javascript arrays sorting

我有一个名为clickNext()的按钮。只要单击该按钮,它就会在名为filteredData的数组上递增索引位置(scope.selected)。

        function clickNext() {
            var length = scope.vm.filteredData.length;

            if (scope.selected === length - 1) {
                return null;
            }
            else {
                scope.selected = (scope.selected + 1) % length;
            }
        }

我已将此数组映射到名为xsData的相同数组。 xsData与filteredData完全相同,只是它的排序方式不同。

如何使用clickNext函数增加范围。为xsData数组选择增量器?现在,clickNext函数仍然按照filteredData数组的顺序递增。

我尝试了以下内容:

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


function filteredToXs( filteredIndex ) {
  var ccir = scope.vm.filteredData[ filteredIndex ];
  var xsIndex = scope.xsDropdown.findIndex( function(item) {
    return item.trackingNumber === ccir.trackingNumber;
} );
  if( xsIndex >= 0 ) return xsIndex;
  if( xsIndex === -1 ) return 0;  // Default value }

我觉得好像解决方案与上面类似,但它并没有像我尝试过的那样递增。

HTML:

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

这就是我获取xsData数组的方法,并根据不同的属性对其进行排序

function populateXsDropdown()
        {
            scope.xsData = scope.filteredData
                .map(function (ccir, index)
                {
                    return {
                        index: index,
                        catNum: ccir.catNum,
                        trackingNumber: ccir.trackingNumber,
                        catType: ccir.catType
                    };
                })
                .sort(function (a, b)
                {
                    var left = a.catNum.match(/CAT (I+) #([0-9]+)/);
                    var right = b.catNum.match(/CAT (I+) #([0-9]+)/);
                    if (left[1].length == right[1].length)
                    {
                        return left[2] - right[2];
                    }
                    else return left[1].length - right[1].length;
                });
        }

0 个答案:

没有答案