[英]Sorting multiple arrays at once
我有3個數組:
陣列1是“名字”約翰,吉姆,傑克,吉爾
陣列2是“年齡”25,30,31,22
陣列3是“性別”男性,男性,男性,女性
我把這些都列在一個帶有可排序標題的表中。 現在排序工作正常,它按“名稱”列進行排序。 我怎樣才能對“年齡”和“性別”數組進行排序以保持正確。 我需要同時對所有3個進行排序。
_nameArray.sort(function(a, b){
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
})
希望它解釋得很好。
沒有結構不能改變,它的方式必須是3個數組,而不是一個,只是按數組中的字段排序。
即使從多個陣列構造對象可能是理想的。 您也可以在沒有使用間接的對象創建開銷的情況下執行此操作。
/* An array of indexes */
var idx = [];
for (var i = 0; i < Name.length; i++) {
idx.push(i);
}
/* A shorthand function */
var comparator = function(arr) {
return function(a, b) {
return ((arr[a] < arr[b]) ? -1 : ((arr[a] > arr[b]) ? 1 : 0));
};
};
/* Sort by Age */
idx = idx.sort(comparator(Age));
/* Get the sorted order */
for (var i = 0; i < Name.length; i++) {
console.log(Name[idx[i]], Age[idx[i]], Gender[idx[i]]);
}
idx
數組包含其他數組元素的索引, idx[i]
。 通過使用間接,您可以訪問Name
, Age
和Gender
的元素; 即, Name[idx[i]]
。
如果性能是一個問題,那么使用就地排序可以更快地構建對象,如果你只做一次。 否則,我會使用間接而不會觸及真正的數組。
注意 : comparator
功能只是一個示例,您需要根據您的標准實際創建自己的比較器功能。
嘗試制作對象(正如一些評論中所建議的)我不確定增加的復雜性是否值得,但無論如何它都會在這里發布,以防它有用。 在這種特殊情況下, Person
對象沒有什么用處,可能更有用的是聚合對象( PersonSet
),它將存儲聯合數據,對其進行排序,並將每種類型的特征列表作為輸入和輸出進行處理。 ( jsfiddle )
var names = ['John', 'Jim', 'Jack', 'Jill'],
ages = [25, 30, 31, 22],
genders = ['male', 'male', 'male', 'female'];
function Person(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
function PersonSet(names, ages, genders) {
this.content = [];
for (var i = 0; i < names.length; i++) {
this.content.push(new Person(names[i], ages[i], genders[i]));
// (alternatively...)
// this.content.push({name: names[i], age: ages[i], gender:
// genders[i]});
}
this.sort = function(aspect) {
this.content.sort(function(a, b) {
return ((a[aspect] < b[aspect]) ? -1 :
((a[aspect] > b[aspect]) ? 1 : 0));
});
};
this.get = function(aspect) {
var r = [];
for (var i = 0; i < this.content.length; i++) {
r.push(this.content[i][aspect]);
}
return r;
}
}
var personSet = new PersonSet(names, ages, genders);
personSet.sort('age');
console.log(personSet.get('name'), personSet.get('age'),
personSet.get('gender'));
如果您想要對表中的數據進行排序,您應該查看Tablesorter
鑒於您的約束,為什么不編寫自己的排序函數。 在sort函數中維護所有數組,如:
- 找到最低的項目。 假設它在索引5處。現在在所有3個數組中將item @ index5與item @ index0交換。
- 從索引1開始重復上述邏輯...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.