你可以这样做:
function create(line) {
var tokens = line.split("|");
var obj = {};
for (var i = 0; i < tokens.length; i++) {
tokens[i] = tokens[i].split(":");
obj[tokens[i][0]] = tokens[i][1];
}
return obj;
}
var arr = [];
for (....) { // iterate over the input that each line is of key/value format
arr.push(create(line));
}
function timestampSort(a, b) {
if (a == b)
return 0;
return a.timestamp < b.timestamp ? -1 : 1;
}
// to sort by timestamp
arr.sort(timestampSort);
此代码以您提供的格式为每个键/值行创建一个对象。该对象将键作为属性。所有这些对象都被推入一个数组,然后通过将比较函数传递给数组的本机排序方法来对其进行排序。
当然,您可以根据需要创建任意数量的比较函数,每个函数都根据不同的属性/标准进行比较。
您可以在此处阅读有关排序方法的更多信息:http://www.w3schools.com/jsref/jsref_sort.asp
编辑
sort 方法既改变了数组本身,又返回了数组,所以这样做:
console.log(arr.sort(timestampSort));
将更改实际数组并返回它,因此 console.log 将打印它。
如果您不想更改原始数组并拥有一个可以排序的副本,您可以:
var arr2 = arr.slice();
arr2.sort(timestampSort);
至于数组中的键,我写的内容仅适用于该行的这一部分:Key1:Value1|Key2:Value2|Key3:Value3|...等
所以,为了增加对整个格式的支持,这里是修改:
function create(line) {
var parts = line.match(/^\(msg(\d+)\) \((.+)\)$/);
var tokens = parts[2].split("|");
var obj = { msgID: parts[1] };
for (var i = 0; i < tokens.length; i++) {
tokens[i] = tokens[i].split(":");
obj[tokens[i][0]] = tokens[i][1];
}
return obj;
}
如果你把这个应用到你给出的例子中,你会得到这个:
arr is: [{
msgID: XXX,
Key1: Value1,
Key2: Value2,
Key3: Value3
}]
希望这可以为您解决问题。