Javascript 从键值对列表创建数组[n,[v,…,z]]

Javascript 从键值对列表创建数组[n,[v,…,z]],javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我有这个输入示例: var c1 = "s_A_3"; var c2 = "s_B_10"; var c3 = "s_B_9"; var c4 = "s_C_18"; var c5 = "s_C_19"; var c6 = "s_C_20"; 可以很容易地连接到: var keypairs = ["A_3","B_10","B_9","C_18","C_19","C_20"]; 我想把它转换成这样的多维数组: var groupArray = [["A",[3]],["B",[10,9]],

我有这个输入示例:

var c1 = "s_A_3";
var c2 = "s_B_10";
var c3 = "s_B_9";
var c4 = "s_C_18";
var c5 = "s_C_19";
var c6 = "s_C_20";
可以很容易地连接到:

var keypairs = ["A_3","B_10","B_9","C_18","C_19","C_20"];
我想把它转换成这样的多维数组:

var groupArray = [["A",[3]],["B",[10,9]],["C",[18,19,20]]];
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"]]] 

这就像是一种卡片分类。我怎样才能做到这一点呢?

可能是这样的:

var groupArray = [["A",[3]],["B",[10,9]],["C",[18,19,20]]];
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"]]] 
当您需要在JS程序中提到“键值对”时,通常最适合使用。。。键值对=D

function solution(input) {
    var kvp = {},
        result = [];
    input.forEach(function (el) {
        var cut = el.split("_"),
            alpha = cut[0],
            numeric = cut[1],
            elsWithSameAlpha = kvp[alpha] = kvp[alpha] || [];
        elsWithSameAlpha.push(numeric);
    });
    Object.keys(kvp).forEach(function (key) {
        result.push([key, kvp[key]]);
    });
    return result;
}

酷!现在用
[“A_3”、“C_20”、“B_10”、“C_19”、“B_9”、“C_18”]
试试看。我在OP中没有看到“排序字母”。@sqykly我也没有看到OP在哪里声明它应该能够以任何顺序处理元素。输入示例强烈建议输入是有序的,这就是我给出的解决方案。如果输入不是按字母排序的,例如,
[“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”、[10、9]
?或者完全不同的东西?