javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > JavaScript改变数组元素顺序

在JavaScript中改变数组元素顺序的多种方法

作者:Never_Satisfied

本文介绍了JavaScript中改变数组元素顺序的多种方法,包括反转、排序、移动元素、随机打乱、旋转、条件排序和自定义排序规则,并提醒了sort()会修改原数组,使用时要注意,需要的朋友可以参考下

在JavaScript中,改变数组元素顺序有多种方法。以下是最常用的几种:

1.反转数组 - reverse()

const arr = [1, 2, 3, 4, 5];
arr.reverse(); // 原地反转
console.log(arr); // [5, 4, 3, 2, 1]

// 创建新数组而不修改原数组
const reversed = [...arr].reverse();

2.排序 - sort()

// 默认排序(按字符串Unicode码点)
const fruits = ['banana', 'apple', 'cherry', 'date'];
fruits.sort();
console.log(fruits); // ['apple', 'banana', 'cherry', 'date']

// 自定义排序
const numbers = [40, 100, 1, 5, 25, 10];
numbers.sort((a, b) => a - b); // 升序
console.log(numbers); // [1, 5, 10, 25, 40, 100]

numbers.sort((a, b) => b - a); // 降序
console.log(numbers); // [100, 40, 25, 10, 5, 1]

// 按对象属性排序
const users = [
  { name: 'Alice', age: 30 },
  { name: 'Bob', age: 25 },
  { name: 'Charlie', age: 35 }
];
users.sort((a, b) => a.age - b.age);

3.移动元素位置

方法1:使用 splice() 移动

function moveElement(arr, fromIndex, toIndex) {
  const element = arr.splice(fromIndex, 1)[0];
  arr.splice(toIndex, 0, element);
  return arr;
}

const arr = ['A', 'B', 'C', 'D', 'E'];
moveElement(arr, 2, 0); // 将C移动到开头
console.log(arr); // ['C', 'A', 'B', 'D', 'E']

方法2:交换两个元素

function swapElements(arr, index1, index2) {
  [arr[index1], arr[index2]] = [arr[index2], arr[index1]];
  return arr;
}

const arr = [1, 2, 3, 4, 5];
swapElements(arr, 0, 4);
console.log(arr); // [5, 2, 3, 4, 1]

4.随机打乱顺序 - Fisher-Yates洗牌算法

function shuffleArray(arr) {
  const newArr = [...arr];
  for (let i = newArr.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [newArr[i], newArr[j]] = [newArr[j], newArr[i]];
  }
  return newArr;
}

const arr = [1, 2, 3, 4, 5];
console.log(shuffleArray(arr)); // 随机顺序

5.旋转数组

// 向右旋转k个位置
function rotateRight(arr, k) {
  const n = arr.length;
  k = k % n;
  return [...arr.slice(n - k), ...arr.slice(0, n - k)];
}

// 向左旋转k个位置
function rotateLeft(arr, k) {
  const n = arr.length;
  k = k % n;
  return [...arr.slice(k), ...arr.slice(0, k)];
}

const arr = [1, 2, 3, 4, 5];
console.log(rotateRight(arr, 2)); // [4, 5, 1, 2, 3]
console.log(rotateLeft(arr, 2));  // [3, 4, 5, 1, 2]

6.根据条件重新排序

// 将特定元素移到前面
const numbers = [1, 2, 3, 4, 5, 6];
const evenFirst = numbers.sort((a, b) => {
  // 偶数在前,奇数在后
  if (a % 2 === 0 && b % 2 !== 0) return -1;
  if (a % 2 !== 0 && b % 2 === 0) return 1;
  return a - b;
});
console.log(evenFirst); // [2, 4, 6, 1, 3, 5]

// 按分组重新排序
const items = ['apple', 'banana', 'carrot', 'date', 'eggplant'];
const order = ['date', 'apple', 'banana']; // 优先顺序
items.sort((a, b) => {
  const aIndex = order.indexOf(a);
  const bIndex = order.indexOf(b);
  if (aIndex === -1 && bIndex === -1) return 0;
  if (aIndex === -1) return 1;
  if (bIndex === -1) return -1;
  return aIndex - bIndex;
});
console.log(items); // ['date', 'apple', 'banana', 'carrot', 'eggplant']

7.使用自定义排序规则

// 按字符串长度排序
const words = ['apple', 'kiwi', 'banana', 'pear'];
words.sort((a, b) => a.length - b.length);
console.log(words); // ['pear', 'kiwi', 'apple', 'banana']

// 按多个条件排序
const students = [
  { name: 'Alice', grade: 'A', age: 20 },
  { name: 'Bob', grade: 'B', age: 22 },
  { name: 'Alice', grade: 'B', age: 21 }
];

students.sort((a, b) => {
  // 先按名字,再按年级,最后按年龄
  if (a.name !== b.name) return a.name.localeCompare(b.name);
  if (a.grade !== b.grade) return a.grade.localeCompare(b.grade);
  return a.age - b.age;
});

注意事项:

sort() 会修改原数组,如果需要保留原数组,先创建副本:

const sorted = [...arr].sort();

sort() 的默认行为是字符串排序,对数字排序需要提供比较函数:

// 错误
[10, 2, 1].sort(); // [1, 10, 2]

// 正确
[10, 2, 1].sort((a, b) => a - b); // [1, 2, 10]

性能考虑:对于大型数组,选择合适的算法很重要。

根据你的具体需求,选择最合适的方法来改变数组元素的顺序。

以上就是在JavaScript中改变数组元素顺序的多种方法的详细内容,更多关于JavaScript改变数组元素顺序的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文