如何更改数组的索引顺序
How can I change the index order of an array?
我有一个按钮,它有一个名为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
}
我希望我能正确理解你的问题。请阅读我在代码部分的评论。
我不得不修改你的来源,这样我才能为你制作一把小提琴。
HTML:我更改了点击事件,并删除了一个不可用的css类
<button type="button" role="menuitem" onclick="clickNext();">Next</button>
采样阵列:它们包含无效对象:我更改了alpha、beta、tango。。到一处房产。您也可以将它们定义为值。。这不重要:
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/
相关文章:
- 名称输入的索引
- 在jQuery中获取表的行索引
- 按照选项卡索引的顺序循环一个jQuery选择
- 设置自定义覆盖和多边形的任意z索引顺序
- 通过普通JS更改元素的索引(顺序)
- Javascript 数组 // 从指定索引开始对数组重新排序,同时保持原始顺序
- 选项卡索引顺序无效
- 更改数组中某些元素(索引)的顺序
- JSON数组索引顺序
- ScrollMagic,反向z索引顺序
- 旋转后保持z索引顺序
- 保持数组的顺序,但改变索引的位置
- jQuery Datepicker - Tab 索引顺序在 IE 中不起作用
- Angular 2的ngFor——使用索引的反向输出顺序
- 如何按顺序(而不是索引)迭代一个类似数组的对象
- AngularJS的顺序数组索引
- 如何保持索引直,当ajax请求是异步的,而不是按顺序完成
- 如何更改数组的索引顺序
- JSON补丁rfc6902:顺序操作和索引
- 两个索引之间的多个顺序字符串替换