你可以像這樣去:
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
編輯
的排序方法都改變了陣列本身並返回數組,這樣做是這樣的:
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
}]
希望這將清除事爲你。
非常好。這似乎做我需要的一切 - 除了我不知道正確的語法訪問排序的數組。 arr是否被排序後的輸出替換,還是需要將第二個數組設置爲這個? arr中的第一個鍵似乎是行號,但我如何訪問其他鍵?謝謝。皮特。 – 2012-02-22 12:46:46
我編輯了我的答案並回答了 – 2012-02-22 13:33:14
(和其他人)。這工作:'var obj = arr [i]; for(var j in obj){out + = j +「:」+ obj [j] +「\ n
」; }',但明確指定鍵爲'obj [Key1]'不。你能幫我理解爲什麼嗎? – 2012-02-28 17:46:47