2016-07-04 120 views
-3

假設我有兩個數組即namesArray如下排序第一個數組的順序第二陣列的

var namesArray = [{"name":"Charlie","age":3},{"name":"Dog","age":1},{"name":"Baker","age":7},{"name":"Abel","age":9}]; 

var names = ['Baker', 'Dog', 'Abel', 'Charlie']; 

能否實現UnderscoreJS,這樣排序的陣列命名以下namesArray以便所有名稱元素名稱數組將按照的名稱的順序排列。

+0

你嘗試過什麼了嗎?我們可以看到一些代碼表明,您至少已經嘗試了一下嗎? –

+2

這與Underscore無關,但簡單的編碼技巧和普通的javascript –

回答

2

使用純Javascript時,可以使用Array#sort作爲排序順序的參考。

var namesArray = [{ "name": "Charlie", "age": 3 }, { "name": "Dog", "age": 1 }, { "name": "Baker", "age": 7 }, { "name": "Abel", "age": 9 }], 
 
    names = ['Baker', 'Dog', 'Abel', 'Charlie'], 
 
    hash = Object.create(null); 
 

 
names.forEach(function (a, i) { 
 
    hash[a] = i + 1; 
 
}); 
 

 
namesArray.sort(function (a, b) { 
 
    return (hash[a.name] || 0) - (hash[b.name] || 0); 
 
}); 
 

 
console.log(namesArray);

2

查找每個名稱的指數sort()。還不如高性能作爲創建索引,但機會的哈希值是這不是關鍵要麼

namesArray.sort(function(a,b){ 
    return names.indexOf(a.name) - names.indexOf(b.name); 
}); 
0

沒有很多事情要做underscrore但你可以做這樣的:我想使用像what Nina does散列要優於 indexOf關於性能。

var namesArray = [{ "name": "Charlie", "age": 3 }, { "name": "Dog", "age": 1 }, { "name": "Baker", "age": 7 }, { "name": "Abel", "age": 9 }]; 
 

 
var names = ['Baker', 'Dog', 'Abel', 'Charlie']; 
 
var sorted = _.sortBy(namesArray, o => names.indexOf(o.name)); 
 

 
console.log(sorted);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>

相關問題