從服務器回傳的資料包含一個字串陣列作為層次結構,如下所示:
var array = [
"house.bedroom.bed",
"house.kitchen.spoon",
"house.kitchen.knife",
"house.bedroom.sofa",
"house.bedroom.tv",
"plants.trees",
"house.birds.parrot.grey"
]
我已經成功地將樹形資料結構作為物件制作出來,以樹形形式輸出資料如下:
house
bedroom
bed
sofa
tv
kitchen
spoon
knife
birds
parrot
grey
plants
trees
有什么方法可以選擇字串嗎?例如,詢問“廚房”我想回傳所有與該字串相關的內容,如下所示:
house.kitchen.knife
house.kitchen.spoon
這是我學到的代碼:
function find([key, values], string, temp = []) {
var result;
temp = temp.concat(key);
if (key === string) {
return temp.slice(1).join('.');
}
values.some(a => result = find(a, string, temp));
return result;
}
var result = array.reduce((r, s) => {
('root.' s).split('.').reduce((a, item) => {
var array = a.find(([v]) => v === item);
if (!array) {
a.push(array = [item, []]);
}
return array[1];
}, r);
return r;
}, []).pop();
console.log(find(result, 'kitchen'));
console.log(result);
我的輸出是:
house.kitchen
uj5u.com熱心網友回復:
我建議過濾原始陣列
const data = ["house.bedroom.bed","house.kitchen.spoon", "house.kitchen.knife","house.bedroom.sofa","house.bedroom.tv",
"plants.trees","house.birds.parrot.grey"];
const result = data.filter((path) => path.split('.').includes('kitchen'));
console.log(result);
.as-console-wrapper{min-height: 100%!important; top: 0}
uj5u.com熱心網友回復:
我相信我明白你在問什么。我會用遞回解決這個問題。
function parse(items) {
return items.reduce((acc, item) => {
const k = item.slice(0, item.indexOf('.'))
const v = item.slice(item.indexOf('.') 1).split('.')
const newItem = {
[k]: v.length > 1 ? parse(v) : v
}
return Object.assign(acc, newItem)
}, { })
}
這不是一個完整的解決方案,但應該可以理解總體思路。對于陣列中的每個專案,將其拆分為一個鍵和一個值。鍵將是 first 之前的字串.,而 value 可以是之后的單個字串.,或者是包含子項的物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/409526.html
標籤:
上一篇:動態映射的無線電組出錯
