javascript - 按另一个(不相关的)数组对数组进行排序

标签 javascript jquery

我有两个长度相同的数组。第一个数组是静态的,具有这种格式的数据 a = [['q', 10], ['s', 20], ['z', 40], ['d', 15]] 和另一个数组 b = [1, 0, 0, 1]。所以 ['q', 10]1 相关,['s', 20] - 与 0, ['z', 40]0, ['d', 15]1。 然后我对第一个数组进行排序并接收,例如 a = [['d', 15], ['s', 20], ['q', 10], ['z', 40]]。那么我可以通过什么方式更改第二个数组以接收 b = [1, 0, 1, 0]

重要。无法在第一个数组中添加/更改任何数据。

最佳答案

如果你可以临时改变第一个数组,你可以这样做:

  1. 用每个元素的索引值扩充第一个数组:

    for (var i = 0; i < a.length; ++i) {
      a[i] = { value: a[i], index: i };
    }
    
  2. 对数组进行排序。如果您的排序功能是“比较”,那么您可以这样做:

    a.sort(function(e1, e2) {
      return compare(e1.value, e2.value);
    });
    
  3. 现在你可以根据索引排列新的“b”了:

    var newB = [];
    for (i = 0; i < a.length; ++i)
      newB[i] = b[a[i].index];
    b = newB;
    
  4. 现在恢复“a”的值:

    for (i = 0; i < a.length; ++i)
      a[i] = a[i].value;
    

关于javascript - 按另一个(不相关的)数组对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17346874/

相关文章:

javascript - JS Cookie 路径未设置

javascript - 如何在地球引擎中保存卫星图像?

javascript - jstree - 阻止单个扩展节点折叠

javascript - Bootstrap 模式关闭时,Firefox 18中没有触发Transitionend事件

Jquery Mobile - 如何使用 Jquery 小部件工厂在 mobileinit 上运行插件

javascript - 有没有办法或工具来查看 View 在渲染到 Ember 中的 dom 之前生成的 html?

javascript - 使用后台 jquery 进行导航

jquery - 使用 jquery 禁用 div 的时间

javascript - 当另一个 div 展开时隐藏 div?

javascript - 如果输入无效,如何制作弹出窗口(警告框)?