我有一个字符串数组,除了它们的一部分外,它们都是相似的,例如:
["1234 - Active - Workroom",
"1224 - Active - Breakroom",
"2365 - Active - Shop"]
我已经发现按ID号排序我只使用JavaScript函数.sort()
,但我无法弄清楚如何按区域排序字符串(例如:“Workroom etc ..”)。
我想要的是:
["1224 - Active - Breakroom",
"2365 - Active - Shop",
"1234 - Active - Workroom"]
“有效”部分将始终相同。
根据我在网上找到的内容,我必须使用.sort()
覆盖方法对其进行排序,但我无法弄清楚在覆盖方法中需要更改的内容。
答案 0 :(得分:5)
你的例子
var items = [
{ name: "Edward", value: 21 },
{ name: "Sharpe", value: 37 },
{ name: "And", value: 45 },
{ name: "The", value: -12 },
{ name: "Magnetic" },
{ name: "Zeros", value: 37 }
];
items.sort(function (a, b) {
if (a.name > b.name)
return 1;
if (a.name < b.name)
return -1;
// a must be equal to b
return 0;
});
您可以创建一个对象来描述您的数据。 示例
data1 = { id : 12123, status:"Active", name:"Shop"}
You can implement your logic in sort().
Return 1 if a > b ;
Return -1 if a < b
Return 0 a == b.
数组将自动按顺序返回 希望它会有所帮助。
答案 1 :(得分:3)
您可以为sort方法提供一个比较两个项目并返回顺序的函数:
yourArray.sort(function(item1, item2){
// compares item1 & item2 and returns:
// -1 if item1 is less than item2
// 0 if equal
// +1 if item1 is greater than item2
});
案例中的例子:
yourArray.sort(function(item1, item2){
// don't forget to check for null/undefined values
var split1 = item1.split(' - ');
var split2 = item2.split(' - ');
return split1[2] < split2[2] ? -1 : (split1[2] > split2[2] ? 1 : 0);
});
答案 2 :(得分:1)
您不必覆盖任何内容,只需传递将进行排序的.sort
自定义函数:
var rsortby = {
id : /^(\d+)/,
name : /(\w+)$/,
status : /-\s*(.+?)\s*-/,
};
var r = rsortby['name'];
[
'1234 - Active - Workroom',
'1224 - Active - Breakroom',
'2365 - Active - Shop',
].
sort(function(a, b) {
var ma = a.match(r)[1];
var mb = b.match(r)[1];
return (ma != mb) ? (ma < mb ? -1 : 1) : 0;
});
// ["1224 - Active - Breakroom", "2365 - Active - Shop", "1234 - Active - Workroom"]
//