1. 程式人生 > 實用技巧 >根據多選下拉框選中的結果,迴圈輸出選中的標籤<el-cascader>;物件陣列由二維變成一維

根據多選下拉框選中的結果,迴圈輸出選中的標籤<el-cascader>;物件陣列由二維變成一維

下面的圖是要實現的互動圖,根據<el-cascader>中v-model繫結的資料,再去下拉框出書資料中進行比對輸出

v-model繫結的資料是一個二維陣列,是這樣的一組資料

[[1,12],[1,24]]

而下拉框的初始資料也是一個物件陣列,類似於這樣的一個結構

[{
    "id": 1,
    "label": "電視媒體",
    "children": [{
        "id": 43,
        "label": "教育科技"
    }, {
        "id": 44,
        "label": "公共新聞"
    }, {
        
"id": 45, "label": "民生休閒" }, { "id": 46, "label": "錢江都市" }, { "id": 47, "label": "浙江經視" }] }, { "id": 2, "label": "電臺媒體", "children": [{ "id": 6, "label": "FM99.6民生廣播" }, { "id": 7, "label": "FM88浙江之聲" }, {
"id": 48, "label": "FM107私家車廣播" }, { "id": 49, "label": "FM95經濟廣播" }, { "id": 50, "label": "FM96.8音樂調頻" }, { "id": 51, "label": "FM93交通之聲" }] }, { "id": 3, "label": "報紙媒體", "children": [{ "id": 10, "label": "錢江晚報" }, {
"id": 11, "label": "市場導報" }, { "id": 52, "label": "浙江日報" }] }, { "id": 4, "label": "城市媒體", "children": [{ "id": 12, "label": "人民日報欄" }, { "id": 13, "label": "武林廣場巨幔" }, { "id": 53, "label": "公交自行車亭" }] }, { "id": 5, "label": "交通媒體", "children": [{ "id": 14, "label": "蕭山機場燈箱" }, { "id": 15, "label": "火車東站燈箱" }] }, { "id": 54, "label": "校園媒體", "children": [{ "id": 55, "label": "平安浙江" }] }, { "id": 56, "label": "社群媒體" }]

我需要把下拉框的初始資料由二維變成一維,下面是物件陣列由二維變成一維的方法

parseArr(arr, res) {
    var i = 0;
    for (i = 0; i < arr.length; i++) {
        if (arr[i].children && arr[i].children.length > 0) {
            this.parseArr(arr[i].children, res);
            var t = JSON.parse(JSON.stringify(arr[i]));
            delete t.children;
            res.push(t);
        } else {
            res.push(arr[i]);
        }
    }
}

其中arr是需要轉換的陣列,res是轉換後的陣列,傳入的時候就是一個空物件

下面就是匹配輸出

mediaTypeList() {
    let arr = [], str = '', arr1 = [];
    this.form.mediumTypeArray.map(item = > {
        item.map(ite = > {
            this.optionList.map(it = > {
                if (it.id == ite) {
                    arr.push(it.label);
                }
            });
        });
    });
    arr.map((item, i) = > {
        if (2 * i >= arr.length) {
            return;
        }
        str = arr[2 * i] + '/' + arr[2 * i + 1];
        arr1.push({
            label: str
        });
        console.log(arr1, 'arr1');
    });
    return arr1;
}

輸出的樣式就是這樣的