我有两个长度相同的数组。第一个数组是静态的,具有这种格式的数据
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]
?
重要。无法在第一个数组中添加/更改任何数据。
最佳答案
如果你可以临时改变第一个数组,你可以这样做:
用每个元素的索引值扩充第一个数组:
for (var i = 0; i < a.length; ++i) { a[i] = { value: a[i], index: i }; }
对数组进行排序。如果您的排序功能是“比较”,那么您可以这样做:
a.sort(function(e1, e2) { return compare(e1.value, e2.value); });
现在你可以根据索引排列新的“b”了:
var newB = []; for (i = 0; i < a.length; ++i) newB[i] = b[a[i].index]; b = newB;
现在恢复“a”的值:
for (i = 0; i < a.length; ++i) a[i] = a[i].value;
关于javascript - 按另一个(不相关的)数组对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17346874/