亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

按第二個單一癡呆數組中列出的索引對一維數組進行排序 - 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 關注
  • 97 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號