【发布时间】:2021-12-23 18:37:11
【问题描述】:
我有一个字符串数组,可以看作是模板/参考:
// Template
let template = ['A', 'B', 'C'];
我还有一个包含一些数组字符串的对象数组:
// Source (to be sorted)
let source = [
{ items: ['B', 'D', 'E'] },
{ items: ['E', 'L', 'Y'] },
{ items: ['G', 'B', 'A'] },
{ items: ['C', 'B', 'A'] }
];
我现在需要找到一种方法,通过匹配template 数组(从最佳到最差)对source 数组中的items 进行排序。 items 中的字符串顺序无关。
根据我上面的例子,排序后的结果是这样的:
// Result after sorting
let sorted = [
{ items: ['C', 'B', 'A'] }, // 3 matches (A, B, C)
{ items: ['G', 'B', 'A'] }, // 2 matches (A, B)
{ items: ['B', 'D', 'E'] }, // 1 match (B)
{ items: ['E', 'L', 'Y'] } // no match
];
使用 JavaScript 方法 .sort() 和 .localCompare() 我可以根据字符串对数组进行排序,但我找不到按给定数组“模板”排序的方法。
如果有人知道如何做到这一点,我会非常高兴? 提前谢谢!
【问题讨论】:
-
source.map(a => a.items.filter(b => template.includes(b)).sort()) 给你。
-
@Ankit 是的,那行不通。
-
有兴趣知道为什么不@RobbyCornelissen
-
@Ankit 您是否将您的解决方案生成的输出与问题中发布的预期输出进行了比较?显然不是。
-
对我来说工作正常,确保你不要忘记更改变量名:p @RobbyCornelissen
标签: javascript arrays sorting