簡體   English   中英

在javascript中對多維數組進行排序

[英]Sort in multi-dimensional arrays in javascript

我在 javascript 中有一個多數組對象

[["A","F","A","H","F","F"],["F","A","A","F","F","H"]]

我想使用一些排序算法獲得以下內容

[["A","A","A","H","A","F"],["F","F","F","F","F","H"]]

不在“A”和“F”中的字母應該保持在它們數組的相同位置。 只有“A”和“F”應該被排序。

您可以展平數組,對其進行排序,以便每個 A 在 F 之前出現,然后再次對其進行切片以匹配原始數據的結構。

 var data = [["A","F","A","H","F","F"],["F","A","A","F","F","H"]] function custom_sort(data) { var sort = [].concat(...data.slice()), r = [] sort.forEach(function(e, i) { if (e == 'A') { var fi = sort.indexOf('F') if (fi < i)(sort[fi] = 'A', sort[i] = 'F') } }) data.forEach(e => r.push(sort.splice(0, e.length))) return r } console.log(JSON.stringify(custom_sort(data))) console.log(JSON.stringify(custom_sort( [["F","F","A","H","F"],["F", "Z", "I", "A","A","A","F","H", "A"]])))

檢查這個。 只需運行此代碼。

 function sortIt(a){ var i=0,j=0; while(i<a.length){ j=i; while(j<a.length){ if((a[i]=="F" || a[i]=="A") && (a[j]=="F" || a[j]=="A") && a[i].charCodeAt(0)>a[j].charCodeAt(0)){ temp=a[i]; a[i]=a[j]; a[j]=temp; } j++; } i++; } return a; } function splitUp(a){ var b=[],i=0; while(i<a.length){ b.push(sortIt(a[i])); i++; } return b; } //test var c=[['A','F','F','H','B','A','A','F','Z','X'],['F','A','A','F','F']]; console.log("Before Sorting\\n"); console.log(c); c = splitUp(c); console.log("After sorting"); console.log(c);

您可以使用傳統方法過濾不可排序的項目,並對其余項目進行排序,然后將不可排序的項目拼接到其原始位置。

 function sort(array) { var solid = [], sortable = { A: true, F: true }, i = array.length; while (i--) { sortable[array[i]] || solid.unshift({ index: i, value: array.splice(i, 1)[0] }); } array.sort(function (a, b) { return a.localeCompare(b); }); solid.forEach(function (a) { array.splice(a.index, 0, a.value); }); } var array = [["A", "F", "A", "H", "F", "F"], ["F", "A", "A", "F", "F", "H"]], temp = array[0].concat(array[1]); sort(temp); array = [temp.slice(0, 6), temp.slice(6, 12)]; console.log(array);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

 var myArrays = [["A","F","A","H","F","F"],["F","A","A","F","F","H"]]; var lengths = []; var tempArray = []; var sortArray = []; var noSortArray = []; myArrays.forEach(function(arr) { lengths.push(arr.length); tempArray = tempArray.concat(arr); }); tempArray.forEach(function(item, index) { if (item === 'H') { noSortArray.push({index: index, item: item}); } else { sortArray.push(item); } }); sortArray.sort(); noSortArray.forEach(function(item) { sortArray.splice(item.index, 0, item.item); }); var position = 0; var theLength = 0; myArrays = []; lengths.forEach(function(aLength) { theLength += aLength; myArrays.push(sortArray.slice(position, theLength)); position += aLength; console.log(position); }); console.log(myArrays);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM