为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

手掌心 2022-12-18 18:57:00
情况是这样的:我需要能够对任何一维数组重新排序,以便新数组以中心数字(如果对象计数为奇数)或中心 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 循环尝试过这个并且可以让它假设地工作,但是我无法将 for 循环用作 Vue.js 中的计算属性。这是我的尝试,但没有用: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;},这是一个带有 .sort 函数的看似更好的方法,但我似乎也无法让它工作。
查看完整描述

1 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

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


function order(arr){

  let right = Math.floor(arr.length / 2);

  let left = right - (arr.length % 2 == 1 ? 0: 1);

  let res = left === right ? [arr[left]] : arr.slice(left, right + 1);

  while(left > 0){

    res.push(arr[--left]);

    res.push(arr[++right]);

  }

  return res;

}

console.log(...order([1,2,3,5,8,13,20]));

console.log(...order([1,2,3,4]));


查看完整回答
反对 回复 2022-12-18
  • 1 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信