簡體   English   中英

從鍵值對列表創建數組[n,[v,..,z]]

[英]Create an array [n,[v,..,z]] from a list of key-value pairs

我有此輸入示例:

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"]]] 

示范


上面的方法假定組將是連續的(例如,所有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"]]] 

示范

當您需要在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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM