[英]How to Sort an array in JavaScript based on another JavaScript array?
我想基於另一個JavaScript數組對JavaScript中的數組進行排序。
First arr = ["Name", "Address1", "Address2", "City", "State", "Zip Code", "Formatted Address"];
Second arr = [Name: "kd", State: "test", Address1: "tt"]
現在,我要按第一個arr的順序對第二個arr進行排序。 我想要這種類型的結果:
[Name: "kd", Address1: "tt", State: "test"]
您可以通過對第一個數組進行迭代來對第二個數組進行排序,如下所示:
Firstarr = ["Name", "Address1", "Address2", "City", "State", "Zip Code", "Formatted Address"];
Secondarr = {Name: "kd", State: "test", Address1: "tt"};
var finalArr = {};
$.each(Firstarr, function(i, value){
if(typeof Secondarr[value] !== "undefined"){
finalArr[value] = Secondarr[value];
}
});
您必須對第二個數組使用JSON格式。
var reference = ["Name", "Address1", "Address2", "City", "State", "Zip Code", "Formatted Address"]; var toSort = { "Name": "kd","State": "test", "Address1": "tt"}; var sorted={}; for(var i=0;i<reference.length;i++) { if(toSort.hasOwnProperty(reference[i])) { sorted[reference[i]]=toSort[reference[i]]; } } console.log(sorted);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
這是沒有jQuery的js中的簡單算法。 orderArray [i]可以稱為鍵,而js中的關聯數組實際上是對象,但這只是語義。
myOrderArray = ["Name", "Address1", "Address2", "City", "State", "Zip Code", "Formatted Address"]; myUnsortedArray = { Name: "kd", State: "test", Address1: "tt" }; function sortArrayByArray( unsortedArray, orderArray ) { let sortedArray = {}; for ( var i = 0; i < orderArray.length; i++ ) { if ( orderArray[i] in unsortedArray ) { sortedArray[orderArray[i]] = unsortedArray[orderArray[i]]; } } return sortedArray; } mySortedArray = sortArrayByArray( myUnsortedArray, myOrderArray ); console.log( mySortedArray );
正如我已經評論過的,第二個看起來更像是一個對象,而不是數組。 它必須初始化為var second = {Name:“ kd”,State:“ test”,Address1:“ tt”};
您的最終輸出將在Array()中,該數組包含在名為finlObj的對象中。 請找到下面的代碼。 您可以優化代碼。 但是為了您的理解,我做了精心設計:
var second = {Name: "kd", State: "test", Address1: "tt"};
var first = ["Name", "Address1", "Address2", "City", "State", "Zip Code", "Formatted Address"];
var finlObj ={specList:[]};
for(var elem in first){
if(second[first[elem]] !== undefined && second[first[elem]] !== null){
finlObj.specList[finlObj.specList.length] = second[first[elem]];
}
}
for(var el in finlObj.specList){
alert(finlObj.specList[el]);
}
這行不通。 在JavaScript中,由於數組是對象,它會接受此處顯示的非整數鍵,但是運行時或提供的用於數組的方法都不允許您對其順序進行任何控制。 這完全取決於解釋器的實現。
同樣,JavaScript對象也是不可排序的,盡管它們在調試工具中顯示時通常按字母順序顯示,但這通常是瀏覽器提供的便利。
您需要的是Map
。 您可以使用此處顯示的表示形式對此進行排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.