【问题标题】:Sort first array based on second array issue根据第二个数组问题对第一个数组进行排序
【发布时间】:2018-11-18 04:24:57
【问题描述】:

我正在尝试根据第二个数组中的排序顺序对 JavaScript 数组进行排序。我已经在这里解决了其他类似的问题,并提出了以下代码。是输出没有达到预期。

var legends = ["Maths","Physics","English","French","Chemistry"];
var sortOrder = [1,400,300,200,-3];

legends.sort( function (a, b) {
    return sortOrder[legends.indexOf(a)] >= sortOrder[legends.indexOf(b)];   
  });


console.log(legends);

想要的输出是

["Chemistry", "Maths", "French", "English", "Physics"];
  • 化学表示排序顺序-3
  • 数学下一个更高的计数,即 1
  • 法语下一个更高的计数,即 200

我正在尝试使用纯 JS 或使用 D3js 获得所需的输出,不确定我是否做得对!

【问题讨论】:

    标签: javascript arrays sorting d3.js


    【解决方案1】:

    您可以使用带有索引的辅助数组,对它们进行排序并映射所需的数组。

    var legends = ["Maths", "Physics", "English", "French", "Chemistry"],
        sortOrder = [1, 400, 300, 200, -3];
    
    legends = [...legends.keys()]
        .sort((a, b) => sortOrder[a] - sortOrder[b])
        .map(i => legends[i]);        
    
    console.log(legends);

    【讨论】:

    • 它有帮助,希望我可以投票,但由于声誉低而无法投票,这里是新的 ;)
    【解决方案2】:

    尝试关注

    var legends = ["Maths","Physics","English","French","Chemistry"];
    var sortOrder = [1,400,300,200,-3];
    
    /* Create an array of objects of value index of sortOrder */
    legends = Object.entries(sortOrder.reduce((a,v,i) => Object.assign(a, {[v]:i}), {}))
    .sort((a,b) => a[0] - b[0]) // Sort array based on sortOrder values
    .map(([s, i]) => legends[i]); // fetch items from legends based on sorted order 
    
    console.log(legends);

    【讨论】:

    • 感谢您的宝贵时间,希望我能投票,但由于声誉低而无法投票,新来的 ;)
    【解决方案3】:

    您几乎是对的,但是在 sort 函数中,您引用了正在变异的 legends 数组,因此索引与原始顺序不匹配。

    为了证明是这种情况,您可以复制数组并对副本进行排序:

    var legends = ["Maths","Physics","English","French","Chemistry"];
    var legendsToSort = ["Maths","Physics","English","French","Chemistry"];
    
    var sortOrder = [1,400,300,200,-3];
    
    legendsToSort.sort( function (a, b) {
        return sortOrder[legends.indexOf(a)] >= sortOrder[legends.indexOf(b)];   
      });
    
    
    console.log(legendsToSort);

    【讨论】:

    • 非常有趣。只是提到一个可能的缺点。
    • 这里不好笑,谢谢你指出这个问题。我只是想帮助 OP 了解为什么他的方法不起作用,而不是提供更好的解决方案
    • @Francesco 排序值不是唯一的,它可以像 [1,5,5,4,-3] 并且图例将是唯一的,因为它将绘制在图表中。但正如你提到的,我的数组数组发生了变异。
    • @NinaScholz 这是一个好点,但我的传说数组不会有重复。
    • 接受了答案,但由于声誉低而无法投票;(
    猜你喜欢
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 2022-01-10
    • 1970-01-01
    相关资源
    最近更新 更多