假设我生成两个数组,一个包含数字数组:
[5.65, 3.25, 4.34, 6.78]
另一个数组,其中包含包含一些信息的对象
[car.object1, car.object2, car.object3, car.object4]
第二个数组中的对象与第一个数组中的数字相关。所以object1与5.65相关,object2与3.25相关,依此类推。
所以我想按升序对数组 1 进行排序,同时也对数组 2 进行排序。
所以结果应该是:
[3.25, 4.34, 5.65, 6.78]
&
[car.object2, car.object3, car.object1, car.object4]
我的方法:(您可以忽略以下答案,因为我认为这是错误的。它不起作用。)
var all = [];
var A = [5.65, 3.25, 4.34, 6.78];
var B = ['store.object1', 'store.object2', 'store.object3', 'store.object4'];
for (var i = 0; i < B.length; i++) {
all.push({
'A': A[i],
'B': B[i]
});
}
all.sort(function(a, b) {
return a.A - b.A;
});
A = [];
B = [];
for (var i = 0; i < all.length; i++) {
A.push(all[i].A);
B.push(all[i].B);
}
console.log(A, B);
除非您想自己实现排序,否则一种简单的方法是将数字数组中的条目与对象数组中的条目(至少是简短的)组合起来,对其进行排序,然后(如有必要)提取结果:
// Setup
var car = {
object1: {name: "object1"},
object2: {name: "object2"},
object3: {name: "object3"},
object4: {name: "object4"}
};
var nums = [5.65, 3.25, 4.34, 6.78];
var objs = [car.object1, car.object2, car.object3, car.object4];
// Combine
var joined = [];
nums.forEach(function(num, index) {
joined[index] = {num: num, object: objs[index]};
});
// Sort
joined.sort(function(a, b) {
return a.num - b.num;
});
// Extract
nums = [];
objs = [];
joined.forEach(function(entry, index) {
nums[index] = entry.num;
objs[index] = entry.object;
});
console.log(nums);
console.log(objs);
.as-console-wrapper {
max-height: 100% !important;
}
但是,与其合并、排序和提取,我可能只维护一个数组并将每个数字添加到其相关对象中,因此它们总是一起移动。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句