あなたはこのようなもので行くことができます:
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
EDIT
ソート方法は、配列自体を変更し、配列を返すので、何かやって両方:
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はソートされた出力に置き換えられるのですか、またはこの配列に2番目の配列を設定する必要がありますか? arrの最初のキーは行番号のように見えますが、他のキーにはどうやってアクセスしますか?ありがとう。ピート。 –
回答を編集しました –
(など)。これはうまくいきます: 'var obj = arr [i]; for(var j in obj){out + = j + ":" + obj [j] + "\ n
"; 'obj [Key1]'と明示的に指定することはできません。理由を理解するのを助けることができますか? –