如何使用循环重新排列数组



我有这个数组[-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);

请帮助我了解我错过了什么

您忘记对数组进行排序。首先排序,然后使用你的逻辑

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);

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);

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

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);

最新更新