2016-03-17 91 views
0

我想使用下劃線_.sortby()函數對某些記錄進行排序。我的要求是對以_開頭的名稱給予更高的優先級。例如。如果我的代碼是sortby使用下劃線

var patients = [ 
    [{name: 'John', roomNumber: 1, bedNumber: 1}], 
    [{name: 'Lisa', roomNumber: 1, bedNumber: 2}], 
    [{name: '_A', roomNumber: 2, bedNumber: 1}], 
    [{name: 'Omar', roomNumber: 3, bedNumber: 1}] 
]; 
var sortedArray = _.sortBy(patients, function(patient) { 
    return patient[0].name; 
}); 

我想記錄_A,roomNumber:2,bedNumber:1在頂部。在某種意義上,我想那種忽略字符串開頭_

+0

你的問題不清楚,一說爲主'_'那麼你說忽略'_' –

回答

1

試試看看這個代碼。

var patients = [ 
 
    [{name: '_John', roomNumber: 1, bedNumber: 1}], 
 
    [{name: 'Lisa', roomNumber: 1, bedNumber: 2}], 
 
    [{name: '_A', roomNumber: 2, bedNumber: 1}], 
 
    [{name: 'Amar', roomNumber: 3, bedNumber: 1}] 
 
]; 
 

 
var sortedByChar = _.sortBy(patients, function(patient) { 
 
    
 
    return (patient[0].name.indexOf('_') != 0) ? patient[0].name[0] : patient[0].name[1]; 
 
    
 
}); 
 

 
var finalArray = _.sortBy(sortedByChar, function(patient) { 
 
    return (patient[0].name.indexOf('_') != 0); 
 
}); 
 

 
alert(JSON.stringify(finalArray));
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

您可以通過添加下劃線到其他的​​名字玩的小提琴,看看它是如何排序。

+0

如果您在記錄集中添加A,我將獲得A作爲最後一條記錄。理想情況下,我會需要A後_A –

+0

對不起,困惑。實際上,我們可以修改邏輯來檢查名稱是否以_ –

+0

開頭,我們正在檢查邏輯權限? indexOf('_') –

-1

一個這樣做的可能性正在更新iteratee在_.sortBy爲類似以下

function(value){ 
    if(value[name].substr(1) != '_') { 
     return "z" + value[name]; 
    } 
    return value[name]; 
} 

此功能將追加到開頭的字符代碼,其值大於_更高,這意味着一切將與_值後,責令

0

你可以做

var sortedArray = _.sortBy(patients, function(patient) { 
    return patient[0].name.replace('_', '0'); 
}); 

見小提琴https://jsfiddle.net/s7r2kxhq/3/

-2

使用Array.prototype.sort和測試,如果名下有一個「_」

var sortedArray = patients.sort(function(a, b) { 
    if (/^_/.test(a[0].name)) { 
     return -1; 
    } 
    return a[0].name < b[0].name ? -1 : 1; 
}); 

而且你的JS對象是一個生活一團糟,爲什麼你還要在你的對象數組?

+0

是的,我編輯了,你現在可以刪除你的downvote –

2

String#localeCompare排序_(無論如何)。

var patients = [[{ name: 'John', roomNumber: 1, bedNumber: 1 }], [{ name: 'Lisa', roomNumber: 1, bedNumber: 2 }], [{ name: 'a', roomNumber: 2, bedNumber: 1 }], [{ name: 'A', roomNumber: 2, bedNumber: 1 }], [{ name: '_A', roomNumber: 2, bedNumber: 1 }], [{ name: 'Omar', roomNumber: 3, bedNumber: 1 }], [{ name: '_Omar', roomNumber: 3, bedNumber: 1 }]], 
 
sortedArray = patients.sort(function (a,b) { 
 
    return a[0].name.localeCompare(b[0].name); 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(sortedArray, 0, 4) + '</pre>');

+0

'sortby使用Underscore'是問題 –

+0

@Reddy是的,你是對的。我應該刪除我的答案嗎? –

+0

:) naaaa我想看到你的邏輯在下劃線sortby的東西..沒有別的隊友..沒有進攻 –

0

可以通過轉換字符串爲小寫實現這一點:

var patients = [ [{name: 'John', roomNumber: 1, bedNumber: 1}], [{name: 'Lisa', roomNumber: 1, bedNumber: 2}], [{name: '_A', roomNumber: 2, bedNumber: 1}], [{name: 'Omar', roomNumber: 3, bedNumber: 1}] ]; 
 

 
var sortedArray = _.sortBy(patients, function(patient) { 
 
    return patient[0].name.toLowerCase(); 
 
}); 
 

 
document.write(JSON.stringify(sortedArray));
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>