javascript - 按特定数组的顺序对其他数组进行排序?

标签 javascript arrays sorting rowsorter

我有一堆这种形式的数组:

var myRows = [
    [{idx: 0, val: 90}, {idx: 1, val: 75}, {idx: 2, val: 35}],
    [{idx: 0, val: 50}, {idx: 1, val: 17}, {idx: 2, val: 95}],
    [{idx: 0, val: 10}, {idx: 1, val: 24}, {idx: 2, val: 80}]
  // ...
];

假设我想按 val 升序对第一行进行排序,因此它变成:

[{idx: 2, val: 35}, {idx: 1, val: 75}, {idx: 0, val: 90}]

是否有一种简单的方法来对剩余的数组进行排序,以便它们的顺序与排序的第一行的 idx 顺序相匹配?

myArrays = [
    [{idx: 2, val: 35}, {idx: 1, val: 75}, {idx: 0, val: 90}]
  , [{idx: 2, val: 95}, {idx: 1, val: 17}, {idx: 0, val: 50}]
  , [{idx: 2, val: 80}, {idx: 1, val: 24}, {idx: 0, val: 10}]
  // ...
];

如果没有 idx 属性,也许这是可能的?

最佳答案

你可以使用 sorting with map并将映射应用于所有项目。

该提案保存索引,对数组进行排序并将该顺序应用于所有其他数组。

// the array to be sorted
var list = [[{ idx: 0, val: 90 }, { idx: 1, val: 75 }, { idx: 2, val: 35 }], [{ idx: 0, val: 50 }, { idx: 1, val: 17 }, { idx: 2, val: 95 }], [{ idx: 0, val: 10 }, { idx: 1, val: 24 }, { idx: 2, val: 80 }]];

// temporary array holds objects with position and sort-value
var mapped = list[0].map(function (el, i) {
    return { index: i, value: el.val };
})

// sorting the mapped array containing the reduced values
mapped.sort(function (a, b) {
    return a.value - b.value;
});

// rearrange all items in list
list.forEach(function (a, i, aa) {
    aa[i] = mapped.map(function (el) {
        return a[el.index];
    });
});

console.log(list);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 按特定数组的顺序对其他数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40991073/

相关文章:

javascript - 如何在不使用组件的情况下从 angular2 路由重定向到外部 URL?

algorithm - 交换排序和冒泡排序有什么区别?它们相同吗?

arrays - For 循环未按正确的顺序返回数组中的项目

javascript - 如何在javascript中过滤数据

javascript - 在调整大小事件js中运行对象的函数

javascript - 使用 PHP 和 Angular.js 进行删除操作时遇到问题

javascript - Webkit 和 jQuery 可拖动跳跃

java - array.remove(0) 删除多个元素

c# - 如何检查多维数组是否具有值及其索引?

javascript - 如何使用jQuery(或正确地)将变量e 'valCookie'的数据添加到数组中?