Last active
January 30, 2021 14:38
-
-
Save shiehnpin/f6b423db7151b358d4c7461aa5d4a9d8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//結果用Path存 | |
//type階層, 數字越大越高層 | |
const typeMap = { | |
commodity: 0, | |
product_cat_3: 1, | |
product_cat_2: 2, | |
product_cat_1: 3, | |
}; | |
let idx = 0; | |
function parse(items, rootPath, result) { | |
//取得當前的這一個 | |
let item = items[idx]; | |
let itemPath = rootPath + "/" + item.type + "/" + item.name; | |
let itemType = item.type; | |
console.log("Current name", item.name); | |
console.log("Current type", itemType); | |
console.log("Current path", itemPath); | |
//加入結果 | |
result.push({ | |
name: item.name, | |
path: itemPath | |
}); | |
//移動到下一個 | |
idx++; | |
console.log("move to idx", idx); | |
if (typeMap[itemType] === typeMap.commodity) { | |
console.log("Add commodity ", itemPath); | |
//商品,回上一層 | |
return; | |
} else { | |
console.log("Add category ", itemPath); | |
} | |
while (idx < items.length) { | |
//處理新的item | |
const nextItem = items[idx]; | |
console.log( | |
"current", | |
item.name, | |
typeMap[itemType], | |
"vs. next", | |
nextItem.name, | |
typeMap[nextItem.type] | |
); | |
//如果新的item的階層比較高,返回上層 | |
if (typeMap[nextItem.type] > typeMap[itemType]) { | |
return; | |
//如果新的item的階層一樣,則帶著目前item的父階層(root path)跳進去 | |
} else if (typeMap[nextItem.type] === typeMap[itemType]) { | |
parse(items, rootPath, result); | |
} else { | |
//如果新的item的階層比較低,則帶著目前item的階層(item path)跳進去 | |
console.log("======jump in to", item.name, "====="); | |
parse(items, itemPath, result); | |
console.log("======leave", item.name, "====="); | |
} | |
} | |
} | |
function _parse(items) { | |
const res = []; | |
parse(items, "", res); | |
console.log("========="); | |
for (let r of res) { | |
console.log(r.path); | |
} | |
} | |
const items = [ | |
{ | |
id: 103, | |
name: "A", | |
type: "product_cat_1", | |
note: "自有商品", | |
shops: [ | |
{ | |
id: "1000", | |
name: "台灣守護", | |
site_name: "台灣守護文創股份有公司", | |
sum: 0 | |
}, | |
{ | |
id: "1100", | |
name: "總公司", | |
site_name: "總公司", | |
sum: 10 | |
}, | |
{ | |
id: "1210", | |
name: "井仔腳", | |
site_name: "北門井仔腳", | |
sum: 41 | |
}, | |
{ | |
id: "1220", | |
name: "出張所", | |
site_name: "夕遊出張所", | |
sum: 59 | |
}, | |
{ | |
id: "1230", | |
name: "鹽博", | |
site_name: "台灣鹽博館", | |
sum: 135 | |
}, | |
{ | |
id: "1231", | |
name: "遊客中心", | |
site_name: "七股遊客中心", | |
sum: 101 | |
} | |
], | |
totalSum: 346 | |
}, | |
{ | |
id: 124, | |
name: "24", | |
type: "product_cat_2", | |
note: "飲品類", | |
shops: [ | |
{ | |
id: "1000", | |
name: "台灣守護", | |
site_name: "台灣守護文創股份有公司", | |
sum: 0 | |
}, | |
{ | |
id: "1100", | |
name: "總公司", | |
site_name: "總公司", | |
sum: 10 | |
}, | |
{ | |
id: "1210", | |
name: "井仔腳", | |
site_name: "北門井仔腳", | |
sum: 41 | |
}, | |
{ | |
id: "1220", | |
name: "出張所", | |
site_name: "夕遊出張所", | |
sum: 59 | |
}, | |
{ | |
id: "1230", | |
name: "鹽博", | |
site_name: "台灣鹽博館", | |
sum: 135 | |
}, | |
{ | |
id: "1231", | |
name: "遊客中心", | |
site_name: "七股遊客中心", | |
sum: 101 | |
} | |
], | |
totalSum: 346 | |
}, | |
{ | |
id: 150, | |
name: "102", | |
type: "product_cat_3", | |
note: "鹽鹵瓶裝水", | |
shops: [ | |
{ | |
id: "1000", | |
name: "台灣守護", | |
site_name: "台灣守護文創股份有公司", | |
sum: 0 | |
}, | |
{ | |
id: "1100", | |
name: "總公司", | |
site_name: "總公司", | |
sum: 10 | |
}, | |
{ | |
id: "1210", | |
name: "井仔腳", | |
site_name: "北門井仔腳", | |
sum: 41 | |
}, | |
{ | |
id: "1220", | |
name: "出張所", | |
site_name: "夕遊出張所", | |
sum: 59 | |
}, | |
{ | |
id: "1230", | |
name: "鹽博", | |
site_name: "台灣鹽博館", | |
sum: 135 | |
}, | |
{ | |
id: "1231", | |
name: "遊客中心", | |
site_name: "七股遊客中心", | |
sum: 101 | |
} | |
], | |
totalSum: 346 | |
}, | |
{ | |
id: "A2410202", | |
name: "鹽鹵25海洋離子水500ml(箱)", | |
type: "commodity", | |
shops: [ | |
{ | |
id: "1000", | |
name: "台灣守護", | |
site_name: "台灣守護文創股份有公司", | |
sum: 0 | |
}, | |
{ | |
id: "1100", | |
name: "總公司", | |
site_name: "總公司", | |
sum: 10 | |
}, | |
{ | |
id: "1210", | |
name: "井仔腳", | |
site_name: "北門井仔腳", | |
sum: 0 | |
}, | |
{ | |
id: "1220", | |
name: "出張所", | |
site_name: "夕遊出張所", | |
sum: 0 | |
}, | |
{ | |
id: "1230", | |
name: "鹽博", | |
site_name: "台灣鹽博館", | |
sum: 2 | |
}, | |
{ | |
id: "1231", | |
name: "遊客中心", | |
site_name: "七股遊客中心", | |
sum: 0 | |
} | |
], | |
commodity_name: "鹽鹵25海洋離子水500ml(箱)", | |
product_cat_1_id: 103, | |
product_cat_2_id: 124, | |
product_cat_3_id: 150, | |
totalSum: 12 | |
}, | |
{ | |
id: "A2410201", | |
name: "鹽鹵25海洋離子水500ml", | |
type: "commodity", | |
shops: [ | |
{ | |
id: "1000", | |
name: "台灣守護", | |
site_name: "台灣守護文創股份有公司", | |
sum: 0 | |
}, | |
{ | |
id: "1100", | |
name: "總公司", | |
site_name: "總公司", | |
sum: 0 | |
}, | |
{ | |
id: "1210", | |
name: "井仔腳", | |
site_name: "北門井仔腳", | |
sum: 41 | |
}, | |
{ | |
id: "1220", | |
name: "出張所", | |
site_name: "夕遊出張所", | |
sum: 59 | |
}, | |
{ | |
id: "1230", | |
name: "鹽博", | |
site_name: "台灣鹽博館", | |
sum: 133 | |
}, | |
{ | |
id: "1231", | |
name: "遊客中心", | |
site_name: "七股遊客中心", | |
sum: 101 | |
} | |
], | |
commodity_name: "鹽鹵25海洋離子水500ml", | |
product_cat_1_id: 103, | |
product_cat_2_id: 124, | |
product_cat_3_id: 150, | |
totalSum: 334 | |
}, | |
{ | |
id: 109, | |
name: "G", | |
type: "product_cat_1", | |
note: "外購商品", | |
shops: [ | |
{ | |
id: "1000", | |
name: "台灣守護", | |
site_name: "台灣守護文創股份有公司", | |
sum: 0 | |
}, | |
{ | |
id: "1100", | |
name: "總公司", | |
site_name: "總公司", | |
sum: 0 | |
}, | |
{ | |
id: "1210", | |
name: "井仔腳", | |
site_name: "北門井仔腳", | |
sum: 0 | |
}, | |
{ | |
id: "1220", | |
name: "出張所", | |
site_name: "夕遊出張所", | |
sum: 199 | |
}, | |
{ | |
id: "1230", | |
name: "鹽博", | |
site_name: "台灣鹽博館", | |
sum: 324 | |
}, | |
{ | |
id: "1231", | |
name: "遊客中心", | |
site_name: "七股遊客中心", | |
sum: 438 | |
} | |
], | |
totalSum: 961 | |
}, | |
{ | |
id: 124, | |
name: "24", | |
type: "product_cat_2", | |
note: "飲品類", | |
shops: [ | |
{ | |
id: "1000", | |
name: "台灣守護", | |
site_name: "台灣守護文創股份有公司", | |
sum: 0 | |
}, | |
{ | |
id: "1100", | |
name: "總公司", | |
site_name: "總公司", | |
sum: 10 | |
}, | |
{ | |
id: "1210", | |
name: "井仔腳", | |
site_name: "北門井仔腳", | |
sum: 41 | |
}, | |
{ | |
id: "1220", | |
name: "出張所", | |
site_name: "夕遊出張所", | |
sum: 59 | |
}, | |
{ | |
id: "1230", | |
name: "鹽博", | |
site_name: "台灣鹽博館", | |
sum: 135 | |
}, | |
{ | |
id: "1231", | |
name: "遊客中心", | |
site_name: "七股遊客中心", | |
sum: 101 | |
} | |
], | |
totalSum: 346 | |
}, | |
{ | |
id: 166, | |
name: "801", | |
type: "product_cat_3", | |
note: "旺爺", | |
shops: [ | |
{ | |
id: "1000", | |
name: "台灣守護", | |
site_name: "台灣守護文創股份有公司", | |
sum: 0 | |
}, | |
{ | |
id: "1100", | |
name: "總公司", | |
site_name: "總公司", | |
sum: 0 | |
}, | |
{ | |
id: "1210", | |
name: "井仔腳", | |
site_name: "北門井仔腳", | |
sum: 0 | |
}, | |
{ | |
id: "1220", | |
name: "出張所", | |
site_name: "夕遊出張所", | |
sum: 199 | |
}, | |
{ | |
id: "1230", | |
name: "鹽博", | |
site_name: "台灣鹽博館", | |
sum: 324 | |
}, | |
{ | |
id: "1231", | |
name: "遊客中心", | |
site_name: "七股遊客中心", | |
sum: 438 | |
} | |
], | |
totalSum: 961 | |
}, | |
{ | |
id: "G2480101", | |
name: "旺爺沙士", | |
type: "commodity", | |
shops: [ | |
{ | |
id: "1000", | |
name: "台灣守護", | |
site_name: "台灣守護文創股份有公司", | |
sum: 0 | |
}, | |
{ | |
id: "1100", | |
name: "總公司", | |
site_name: "總公司", | |
sum: 0 | |
}, | |
{ | |
id: "1210", | |
name: "井仔腳", | |
site_name: "北門井仔腳", | |
sum: 0 | |
}, | |
{ | |
id: "1220", | |
name: "出張所", | |
site_name: "夕遊出張所", | |
sum: 199 | |
}, | |
{ | |
id: "1230", | |
name: "鹽博", | |
site_name: "台灣鹽博館", | |
sum: 324 | |
}, | |
{ | |
id: "1231", | |
name: "遊客中心", | |
site_name: "七股遊客中心", | |
sum: 438 | |
} | |
], | |
commodity_name: "旺爺沙士", | |
product_cat_1_id: 109, | |
product_cat_2_id: 124, | |
product_cat_3_id: 166, | |
totalSum: 961 | |
} | |
]; | |
_parse(items); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//結果用巢狀存 | |
const typeMap = { | |
commodity: 0, | |
product_cat_3: 1, | |
product_cat_2: 2, | |
product_cat_1: 3, | |
}; | |
let idx = 0; | |
function parse(items, rootPath, result) { | |
//取得當前的這一個 | |
let item = items[idx]; | |
let itemPath = rootPath + "/" + item.type + "/" + item.name; | |
let itemType = item.type; | |
//加入結果 | |
if(typeMap[itemType] === typeMap.commodity){ | |
result.push(item); | |
}else{ | |
item.childrens = []; | |
result.push(item); | |
} | |
idx++; | |
if (typeMap[itemType] === typeMap.commodity) { | |
return; | |
} | |
while (idx < items.length) { | |
const nextItem = items[idx]; | |
if (typeMap[nextItem.type] > typeMap[itemType]) { | |
return; | |
} else if (typeMap[nextItem.type] === typeMap[itemType]) { | |
parse(items, rootPath, result); | |
} else { | |
parse(items, itemPath, item.childrens); | |
} | |
} | |
} | |
function _parse(items) { | |
const res = [] | |
parse(items, "", res); | |
console.log(JSON.stringify(res, null, 2)); | |
} | |
const items = [ | |
{ | |
id: 103, | |
name: "A", | |
type: "product_cat_1", | |
note: "自有商品", | |
shops: [ | |
{ | |
id: "1000", | |
name: "台灣守護", | |
site_name: "台灣守護文創股份有公司", | |
sum: 0 | |
}, | |
{ | |
id: "1100", | |
name: "總公司", | |
site_name: "總公司", | |
sum: 10 | |
}, | |
{ | |
id: "1210", | |
name: "井仔腳", | |
site_name: "北門井仔腳", | |
sum: 41 | |
}, | |
{ | |
id: "1220", | |
name: "出張所", | |
site_name: "夕遊出張所", | |
sum: 59 | |
}, | |
{ | |
id: "1230", | |
name: "鹽博", | |
site_name: "台灣鹽博館", | |
sum: 135 | |
}, | |
{ | |
id: "1231", | |
name: "遊客中心", | |
site_name: "七股遊客中心", | |
sum: 101 | |
} | |
], | |
totalSum: 346 | |
}, | |
{ | |
id: 124, | |
name: "24", | |
type: "product_cat_2", | |
note: "飲品類", | |
shops: [ | |
{ | |
id: "1000", | |
name: "台灣守護", | |
site_name: "台灣守護文創股份有公司", | |
sum: 0 | |
}, | |
{ | |
id: "1100", | |
name: "總公司", | |
site_name: "總公司", | |
sum: 10 | |
}, | |
{ | |
id: "1210", | |
name: "井仔腳", | |
site_name: "北門井仔腳", | |
sum: 41 | |
}, | |
{ | |
id: "1220", | |
name: "出張所", | |
site_name: "夕遊出張所", | |
sum: 59 | |
}, | |
{ | |
id: "1230", | |
name: "鹽博", | |
site_name: "台灣鹽博館", | |
sum: 135 | |
}, | |
{ | |
id: "1231", | |
name: "遊客中心", | |
site_name: "七股遊客中心", | |
sum: 101 | |
} | |
], | |
totalSum: 346 | |
}, | |
{ | |
id: 150, | |
name: "102", | |
type: "product_cat_3", | |
note: "鹽鹵瓶裝水", | |
shops: [ | |
{ | |
id: "1000", | |
name: "台灣守護", | |
site_name: "台灣守護文創股份有公司", | |
sum: 0 | |
}, | |
{ | |
id: "1100", | |
name: "總公司", | |
site_name: "總公司", | |
sum: 10 | |
}, | |
{ | |
id: "1210", | |
name: "井仔腳", | |
site_name: "北門井仔腳", | |
sum: 41 | |
}, | |
{ | |
id: "1220", | |
name: "出張所", | |
site_name: "夕遊出張所", | |
sum: 59 | |
}, | |
{ | |
id: "1230", | |
name: "鹽博", | |
site_name: "台灣鹽博館", | |
sum: 135 | |
}, | |
{ | |
id: "1231", | |
name: "遊客中心", | |
site_name: "七股遊客中心", | |
sum: 101 | |
} | |
], | |
totalSum: 346 | |
}, | |
{ | |
id: "A2410202", | |
name: "鹽鹵25海洋離子水500ml(箱)", | |
type: "commodity", | |
shops: [ | |
{ | |
id: "1000", | |
name: "台灣守護", | |
site_name: "台灣守護文創股份有公司", | |
sum: 0 | |
}, | |
{ | |
id: "1100", | |
name: "總公司", | |
site_name: "總公司", | |
sum: 10 | |
}, | |
{ | |
id: "1210", | |
name: "井仔腳", | |
site_name: "北門井仔腳", | |
sum: 0 | |
}, | |
{ | |
id: "1220", | |
name: "出張所", | |
site_name: "夕遊出張所", | |
sum: 0 | |
}, | |
{ | |
id: "1230", | |
name: "鹽博", | |
site_name: "台灣鹽博館", | |
sum: 2 | |
}, | |
{ | |
id: "1231", | |
name: "遊客中心", | |
site_name: "七股遊客中心", | |
sum: 0 | |
} | |
], | |
commodity_name: "鹽鹵25海洋離子水500ml(箱)", | |
product_cat_1_id: 103, | |
product_cat_2_id: 124, | |
product_cat_3_id: 150, | |
totalSum: 12 | |
}, | |
{ | |
id: "A2410201", | |
name: "鹽鹵25海洋離子水500ml", | |
type: "commodity", | |
shops: [ | |
{ | |
id: "1000", | |
name: "台灣守護", | |
site_name: "台灣守護文創股份有公司", | |
sum: 0 | |
}, | |
{ | |
id: "1100", | |
name: "總公司", | |
site_name: "總公司", | |
sum: 0 | |
}, | |
{ | |
id: "1210", | |
name: "井仔腳", | |
site_name: "北門井仔腳", | |
sum: 41 | |
}, | |
{ | |
id: "1220", | |
name: "出張所", | |
site_name: "夕遊出張所", | |
sum: 59 | |
}, | |
{ | |
id: "1230", | |
name: "鹽博", | |
site_name: "台灣鹽博館", | |
sum: 133 | |
}, | |
{ | |
id: "1231", | |
name: "遊客中心", | |
site_name: "七股遊客中心", | |
sum: 101 | |
} | |
], | |
commodity_name: "鹽鹵25海洋離子水500ml", | |
product_cat_1_id: 103, | |
product_cat_2_id: 124, | |
product_cat_3_id: 150, | |
totalSum: 334 | |
}, | |
{ | |
id: 109, | |
name: "G", | |
type: "product_cat_1", | |
note: "外購商品", | |
shops: [ | |
{ | |
id: "1000", | |
name: "台灣守護", | |
site_name: "台灣守護文創股份有公司", | |
sum: 0 | |
}, | |
{ | |
id: "1100", | |
name: "總公司", | |
site_name: "總公司", | |
sum: 0 | |
}, | |
{ | |
id: "1210", | |
name: "井仔腳", | |
site_name: "北門井仔腳", | |
sum: 0 | |
}, | |
{ | |
id: "1220", | |
name: "出張所", | |
site_name: "夕遊出張所", | |
sum: 199 | |
}, | |
{ | |
id: "1230", | |
name: "鹽博", | |
site_name: "台灣鹽博館", | |
sum: 324 | |
}, | |
{ | |
id: "1231", | |
name: "遊客中心", | |
site_name: "七股遊客中心", | |
sum: 438 | |
} | |
], | |
totalSum: 961 | |
}, | |
{ | |
id: 124, | |
name: "24", | |
type: "product_cat_2", | |
note: "飲品類", | |
shops: [ | |
{ | |
id: "1000", | |
name: "台灣守護", | |
site_name: "台灣守護文創股份有公司", | |
sum: 0 | |
}, | |
{ | |
id: "1100", | |
name: "總公司", | |
site_name: "總公司", | |
sum: 10 | |
}, | |
{ | |
id: "1210", | |
name: "井仔腳", | |
site_name: "北門井仔腳", | |
sum: 41 | |
}, | |
{ | |
id: "1220", | |
name: "出張所", | |
site_name: "夕遊出張所", | |
sum: 59 | |
}, | |
{ | |
id: "1230", | |
name: "鹽博", | |
site_name: "台灣鹽博館", | |
sum: 135 | |
}, | |
{ | |
id: "1231", | |
name: "遊客中心", | |
site_name: "七股遊客中心", | |
sum: 101 | |
} | |
], | |
totalSum: 346 | |
}, | |
{ | |
id: 166, | |
name: "801", | |
type: "product_cat_3", | |
note: "旺爺", | |
shops: [ | |
{ | |
id: "1000", | |
name: "台灣守護", | |
site_name: "台灣守護文創股份有公司", | |
sum: 0 | |
}, | |
{ | |
id: "1100", | |
name: "總公司", | |
site_name: "總公司", | |
sum: 0 | |
}, | |
{ | |
id: "1210", | |
name: "井仔腳", | |
site_name: "北門井仔腳", | |
sum: 0 | |
}, | |
{ | |
id: "1220", | |
name: "出張所", | |
site_name: "夕遊出張所", | |
sum: 199 | |
}, | |
{ | |
id: "1230", | |
name: "鹽博", | |
site_name: "台灣鹽博館", | |
sum: 324 | |
}, | |
{ | |
id: "1231", | |
name: "遊客中心", | |
site_name: "七股遊客中心", | |
sum: 438 | |
} | |
], | |
totalSum: 961 | |
}, | |
{ | |
id: "G2480101", | |
name: "旺爺沙士", | |
type: "commodity", | |
shops: [ | |
{ | |
id: "1000", | |
name: "台灣守護", | |
site_name: "台灣守護文創股份有公司", | |
sum: 0 | |
}, | |
{ | |
id: "1100", | |
name: "總公司", | |
site_name: "總公司", | |
sum: 0 | |
}, | |
{ | |
id: "1210", | |
name: "井仔腳", | |
site_name: "北門井仔腳", | |
sum: 0 | |
}, | |
{ | |
id: "1220", | |
name: "出張所", | |
site_name: "夕遊出張所", | |
sum: 199 | |
}, | |
{ | |
id: "1230", | |
name: "鹽博", | |
site_name: "台灣鹽博館", | |
sum: 324 | |
}, | |
{ | |
id: "1231", | |
name: "遊客中心", | |
site_name: "七股遊客中心", | |
sum: 438 | |
} | |
], | |
commodity_name: "旺爺沙士", | |
product_cat_1_id: 109, | |
product_cat_2_id: 124, | |
product_cat_3_id: 166, | |
totalSum: 961 | |
} | |
]; | |
_parse(items); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment