也許是這樣的:
function makeGroups(arr) {
var result = [], prev;
for(var i = 0; i < arr.length; i++) {
var x = arr[i].split("_");
if (prev !== x[0]) {
prev = x[0];
result.push([prev, []]);
}
result[result.length - 1][1].push(x[1]); // or .push(parseInt(x[1], 10))
}
return result;
}
var keypairs = ["A_3","B_10","B_9","C_18","C_19","C_20"];
console.log(makeGroups(keypairs));
// [["A",["3"]],["B",["10","9"]],["C",["18","19","20"]]]
Demonstration
上述方法假設基團將是連續的(例如所有B_
元件一起出現)。如果您的輸入可能會失靈,你可以調整這個算法還是組中的所有元素結合在一起,無論他們出現在輸入:
function makeGroups(arr) {
var result = [], keys = {};
for(var i = 0; i < arr.length; i++) {
var x = arr[i].split("_");
if (!(x[0] in keys)) {
keys[x[0]] = [];
result.push([x[0], keys[x[0]]]);
}
keys[x[0]].push(x[1]); // or .push(parseInt(x[1], 10))
}
return result;
}
var keypairs = ["A_3","B_10","C_18","C_19","C_20","B_9"];
console.log(makeGroups(keypairs));
// [["A",["3"]],["B",["10","9"]],["C",["18","19","20"]]]
Demonstration
當您的輸入未按字母順序排列時,您的預期輸出是什麼,例如: '[「A_3」,「C_20」,「B_10」,「C_19」,「B_9」,「C_18」]'?它是'[[「A」,[3]],[「C」,[20]],[「B」,[10]],[「C」,[19]],[「B」 9]],[「C」,[18]]]或'[[「A」,[3]],[「C」,[20,19,18]],[「B」 9]]]'?或者完全不同? – sqykly