使用下划线排序
sortby using Underscore
我正在尝试使用下划线 _.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 位于顶部。从某种意义上说,我希望排序忽略以 _
开头的字符串
这样做的一种可能性是将 _.sortBy 中的迭代对象更新为如下内容
function(value){
if(value[name].substr(1) != '_') {
return "z" + value[name];
}
return value[name];
}
此函数将在开头附加一个代码值高于 _ 的字符,这意味着其他所有内容都将排在带有 _
的值之后
你可以做到
var sortedArray = _.sortBy(patients, function(patient) {
return patient[0].name.replace('_', '0');
});
使用 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对象有点奇怪,为什么你的对象周围有一个数组?
试试这个代码。
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>
您可以通过在其他名称中添加下划线来尝试 fiddle 并查看其排序方式。
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>');
您可以通过将字符串转换为小写来实现此目的:
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>
我正在尝试使用下划线 _.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 位于顶部。从某种意义上说,我希望排序忽略以 _
开头的字符串这样做的一种可能性是将 _.sortBy 中的迭代对象更新为如下内容
function(value){
if(value[name].substr(1) != '_') {
return "z" + value[name];
}
return value[name];
}
此函数将在开头附加一个代码值高于 _ 的字符,这意味着其他所有内容都将排在带有 _
的值之后你可以做到
var sortedArray = _.sortBy(patients, function(patient) {
return patient[0].name.replace('_', '0');
});
使用 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对象有点奇怪,为什么你的对象周围有一个数组?
试试这个代码。
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>
您可以通过在其他名称中添加下划线来尝试 fiddle 并查看其排序方式。
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>');
您可以通过将字符串转换为小写来实现此目的:
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>