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
相关产品推荐
相关产品推荐

