【问题标题】:How to rearrange array in place using loop如何使用循环重新排列数组
【发布时间】:2021-11-20 04:01:51
【问题描述】:

我有这个数组[-1, 8, -1, 6, -1, 4, -1, 2, 0, -1]

我想使用循环重新排列,元素将放置在其索引中

例如,元素 8 将放在第 8 个索引中,元素 0 将放在第 0 个索引中

输出[0,-1,2,-1,4,-1,6,-1,8,-1];

这是我的代码

let arr = [-1, 8, -1, 6, -1, 4, -1, 2, 0, -1];

for (let i = 0; i < arr.length; i++) {
  const elem = arr[i];
  // console.log('---',elem)
  if (i !== arr[i]) {
    if (arr[i] !== -1) {

      const valInd = arr[arr[i]];
      arr[arr[i]] = elem;
      arr[i] = valInd
    }
  }

};

console.log(arr);

请帮助我了解我在哪里失踪

【问题讨论】:

  • 你应该显示更多的重新排列条件的细节
  • -1 固定了吗???
  • 如果您交换两个数字,只能保证其中 一个 在正确的位置。例如,[2, -1, 1] - 交换21 意味着2 在其索引处,但1 现在不在位置,它也需要交换,但在此之前循环继续到下一个索引。

标签: javascript sorting


【解决方案1】:

您忘记对数组进行排序。先排序再用你的逻辑

let arr = [-1, 8, -1, 6, -1, 4, -1, 2, 0, -1];
arr.sort()
for (let i = 0; i < arr.length; i++) {
  const elem = arr[i];
  // console.log('---',elem)
  if (i !== arr[i]) {
    if (arr[i] !== -1) {

      const valInd = arr[arr[i]];
      arr[arr[i]] = elem;
      arr[i] = valInd
    }
  }

};

console.log(arr);

【讨论】:

  • 让我知道这是否有效 ;)
【解决方案2】:

let arr = [-1, 8, -1, 6, -1, 4, -1, 2, 0, -1];
let output = new Array(arr.length).fill(-1);

arr.forEach(el => {
  if(el === -1) return;
  output[el]= el;
});
console.log(output);

【讨论】:

    【解决方案3】:

    如果您只想为这些项目运行,我认为这段代码会对您有所帮助。

    let arr = [-1, 8, -1, 6, -1, 4, -1, 2, 0, -1];
    for (let i = 0; i < arr.length; i++) {
      if (arr.includes(i)) {
        const ind = arr.indexOf(i);
        arr[ind] = arr[i];
        arr[i] = i;
      }
    }
    console.log(arr);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 2014-03-20
      • 2015-11-16
      • 2016-05-15
      相关资源
      最近更新 更多