返回

如何根据另一个数组对 JavaScript 数组进行排序?

javascript

基于另一个数组对 JavaScript 数组进行排序

问题

有时候,我们需要根据另一个数组中的顺序对 JavaScript 数组中的项目进行排序。但是,没有 ID 来跟踪项目,给我们带来了挑战。

解决方案

1. 将排序数组转换为对象

const sortingObject = {};
for (let i = 0; i < sortingArr.length; i++) {
    sortingObject[sortingArr[i]] = true;
}

这个对象包含 sortingArr 中的所有值作为键,值为 true

2. 自定义比较函数

const compareFunction = (a, b) => {
    const aPriority = sortingObject[a[1]] ? 1 : 0;
    const bPriority = sortingObject[b[1]] ? 1 : 0;
    return aPriority - bPriority;
};

这个函数比较两个项目的第二个元素是否在 sortingObject 中。如果有,返回 1;否则,返回 0

3. 使用 sort 方法排序

itemsArray.sort(compareFunction);

这个函数使用 compareFunctionitemsArray 进行排序,优先级高的项目排在前面。

代码示例

const itemsArray = [['Anne', 'a'], ['Bob', 'b'], ['Henry', 'b'], ['Andrew', 'd'], ['Jason', 'c'], ['Thomas', 'b']];
const sortingArr = ['b', 'c', 'b', 'b', 'a', 'd'];

// 将排序数组转换为对象
const sortingObject = {};
for (let i = 0; i < sortingArr.length; i++) {
    sortingObject[sortingArr[i]] = true;
}

// 自定义比较函数
const compareFunction = (a, b) => {
    const aPriority = sortingObject[a[1]] ? 1 : 0;
    const bPriority = sortingObject[b[1]] ? 1 : 0;
    return aPriority - bPriority;
};

// 使用 sort 方法排序
itemsArray.sort(compareFunction);

console.log(itemsArray); // 输出排序后的数组

结论

通过遵循这些步骤,我们成功地根据另一个数组中的顺序对 JavaScript 数组进行了排序。

常见问题解答

  1. 为什么需要使用自定义比较函数?

    因为 JavaScript 的默认排序功能不考虑另一个数组中的顺序。

  2. 是否有更简单的方法?

    此方法提供了对项目的灵活排序,但在某些情况下,可能存在更简单的替代方案,具体取决于问题的具体要求。

  3. 如何处理包含重复项的数组?

    此方法可以处理重复项,但排序结果将取决于 compareFunction 的实现。

  4. 如果我没有第二个数组的顺序信息怎么办?

    如果你没有明确的顺序信息,你将无法使用此方法对数组进行排序。

  5. 我如何自定义排序顺序?

    你可以修改 compareFunction 函数来改变排序的顺序。例如,你可以将优先级值改为 -1,以将优先级低的项目排在前面。