按照第二个单元素数组-JavaScript中列出的索引对一维数组进行排序

按照第二个单元素数组-JavaScript中列出的索引对一维数组进行排序,javascript,arrays,sorting,vue.js,Javascript,Arrays,Sorting,Vue.js,情况是这样的:我需要能够对任何一维数组进行重新排序,以便新数组从中心数(如果对象计数为奇数)或中心2数(如果对象计数为偶数)开始,然后低迭代,然后高迭代,直到原始数组中的所有数都计算完毕 示例1-奇数个对象: 原始数组:[1,2,3,5,8,13,20] 新数组:[5,3,8,2,13,1,20] 示例2-偶数个对象: 原始数组:[1,2,3,4] 新数组:[2,3,1,4] 我已经用for循环尝试过了,并且可以假设它可以工作,但是我不能在Vue.js中将for循环用作计算属性 以下是我的尝试

情况是这样的:我需要能够对任何一维数组进行重新排序,以便新数组从中心数(如果对象计数为奇数)或中心2数(如果对象计数为偶数)开始,然后低迭代,然后高迭代,直到原始数组中的所有数都计算完毕

示例1-奇数个对象: 原始数组:[1,2,3,5,8,13,20] 新数组:[5,3,8,2,13,1,20]

示例2-偶数个对象: 原始数组:[1,2,3,4] 新数组:[2,3,1,4]

我已经用for循环尝试过了,并且可以假设它可以工作,但是我不能在Vue.js中将for循环用作计算属性


以下是我的尝试,但没有成功:

gameInfo: {
      cards: [1, 2, 3, 6, 8, 13, 21, 40, 1000],
    }

reorderOddCards() {
  ATTEMPT 1
  const cardCount = this.gameInfo.cards.length;
  const middleNumber = (cardCount / 2).toFixed(0);
  const newCardOrder = this.gameInfo.cards.map(addToArray);

  function addToArray(value, index) {
    if (index < middleNumber) {
      const newIndex = (((middleNumber - index) * 2) - 1);
      newCardOrder.splice(newIndex, 1, value);
    } else if (index === middleNumber) {
      newCardOrder.splice(index, 1, value);
    } else {
      const newIndex = ((middleNumber - index) * 2);
      newCardOrder.splice(newIndex, 1, value);
    }
  }

  return newCardOrder;
},
gameInfo:{
卡片:[1,2,3,6,8,13,21,40,1000],
}
reorderOddCards(){
尝试1
const cardCount=this.gameInfo.cards.length;
常数middleNumber=(cardCount/2).toFixed(0);
const newCardOrder=this.gameInfo.cards.map(addToArray);
函数addToArray(值、索引){
if(索引<中间编号){
常数newIndex=((中间数-索引)*2)-1);
newCardOrder.splice(newIndex,1,值);
}else if(索引===中间编号){
newCardOrder.splice(索引,1,值);
}否则{
常数newIndex=((中间数-索引)*2);
newCardOrder.splice(newIndex,1,值);
}
}
退回新卡订单;
},

这里有一个使用.sort函数的更好方法,但我似乎也无法让它工作


这可以通过一个简单的
while
循环来实现。这里的关键是找到中间索引。在奇数长度数组中,只有一个中心,我们可以将其视为左中心和右中心位于同一点上,以推广该解。该指数是地板长度除以2的结果。正确的索引也将始终是该值。但是,对于偶数长度数组,我们需要将左索引减少1。计算完这些索引后,我们循环,同时递减左索引并递增右索引,以向结果数组中添加值

功能顺序(arr){
let right=数学楼层(arr.length/2);
设left=right-(arr.length%2==1?0:1);
让res=left==right?[arr[left]]:arr.slice(左,右+1);
而(左>0){
res.push(arr[--左]);
res.push(arr[++右]);
}
返回res;
}
控制台日志(…顺序([1,2,3,5,8,13,20]);

日志(…顺序([1,2,3,4])请创建一个添加的MCVE-我认为使用.sort选项会更好。有什么建议吗?请添加解释,现在似乎有点冗长。这个
中心
是否与数组的
中值
相同?