以此为例:
var data = [
{ name: 'Random 100 Index' },
{ name: 'Random 25 Index' },
{ name: 'Random 75 Index' },
{ name: 'Random 50 Index' } ];
我想基于 name 属性按升序对此数组进行排序。我已经尝试了各种jQuery& amp;技术Underscore.js和我没有得到我想要的东西。问题是 Random 100 Index 将是排序数组中的第一项。 以此功能为例:
function sortByProperty(property) {
'use strict';
return function (a, b) {
var sortStatus = 0;
if (a[property] < b[property]) {
sortStatus = -1;
} else if (a[property] > b[property]) {
sortStatus = 1;
}
return sortStatus;
}; }
当我var result = data.sort(sortByProperty('name'));
时,结果如下:
[{ name: 'Random 100 Index' }, { name: 'Random 25 Index }, { name: 'Random 50 Index' }, { name: 'Random 75 Index' } ]
项目已正确排序,但 Random 100 Index 应该是最后一项。
我该如何解决这个问题?你如何对这样的字符串数组进行排序?
答案 0 :(得分:4)
您可以使用 sort()
和 match()
。使用 match()
从字符串中查找整数值,根据 sort()
的帮助对数组进行排序。
var data = [{
name: 'Random 100 Index'
}, {
name: 'Random 25 Index'
}, {
name: 'Random 75 Index'
}, {
name: 'Random 50 Index'
}];
var res = data.sort(function(a, b) {
return a.name.match(/\d+/)[0] - b.name.match(/\d+/)[0];
});
document.write('<pre>' + JSON.stringify(res,null,2) + '</pre>');
UPDATE:它只会根据字符串中第一次出现的数字进行排序。
答案 1 :(得分:1)
临时存储索引和大数据集值的结果。
var data = [
{ name: 'Random 100 Index' },
{ name: 'Random 25 Index' },
{ name: 'Random 75 Index' },
{ name: 'Random 50 Index' }
],
result = data.map(function (el, i) {
return {
index: i,
value: /\d+/.exec(el.name)[0]
};
}).sort(function (a, b) {
return a.value - b.value;
}).map(function (el) {
return data[el.index];
});
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
&#13;
答案 2 :(得分:-1)
感谢 Pranav C Balan 和 Nina Scholz ,我提出了以下解决方案。
按字母顺序排序数组:
function sortByProperty(property) {
'use strict';
return function (a, b) {
var sortStatus = 0;
if (a[property] < b[property]) {
sortStatus = -1;
} else if (a[property] > b[property]) {
sortStatus = 1;
}
return sortStatus;
};
}
var result = data.sort(sortByProperty('name'));
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
根据属性文本中的第一个数字对数组进行排序:
var res2 = res1.sort(function(a, b) {
return a.name.match(/\d+/)[0] - b.name.match(/\d+/)[0];
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
非常简单。 谢谢大家:))