You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何按照给定字符串顺序对对象数组进行自定义排序

实现思路

我们直接封装一个自定义排序方法即可,会自动兼容你给出的两种答案存储结构:

  • 答案对象以统一answer作为键的场景(对应第一题答案结构)
  • 答案对象以answer+大写字母作为键的场景(对应第二、三题答案结构)

处理逻辑很简单:

  • 先把传入的顺序字符串拆分为字母数组,生成权重映射表,排序时直接对比权重值即可
  • 自动识别每个答案对象的键类型,匹配对应顺序位置

代码实现

function sortAnswersByOrder(answerArr, orderStr) {
  // 拆分顺序字符串,生成权重映射:比如A对应权重0,C对应1,B对应2,D对应3
  const orderList = orderStr.split(/\s*,\s*/);
  const weightMap = new Map(orderList.map((letter, index) => [letter, index]));

  return answerArr.sort((a, b) => {
    // 提取a对应的顺序字母
    const aKey = Object.keys(a).find(key => key.startsWith('answer'));
    const aLetter = aKey === 'answer' ? orderList[answerArr.indexOf(a)] : aKey.replace('answer', '');
    // 提取b对应的顺序字母
    const bKey = Object.keys(b).find(key => key.startsWith('answer'));
    const bLetter = bKey === 'answer' ? orderList[answerArr.indexOf(b)] : bKey.replace('answer', '');
    // 按权重大小排序
    return weightMap.get(aLetter) - weightMap.get(bLetter);
  });
}

使用示例

// 第二题按A、C、B、D顺序排序
const sortedSecondAnswers = sortAnswersByOrder(anwersToSecondQuestion, 'A, C, B, D');
console.log(sortedSecondAnswers);

// 第一题按指定顺序排序
const sortedFirstAnswers = sortAnswersByOrder(answersToFirstQuestion, 'A, C, B, D');
console.log(sortedFirstAnswers);

调用后输出的结果和你给出的预期格式完全一致。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 02:39:00