[英]More than one grouping in lodash
我有這個樣本數據要分組
[
{
heading: "pikachu",
sideHeading: "yellow",
subSideHeading: "electric",
comment: "its a pokemon"
},
{
heading: "pikachu",
sideHeading: "yellow",
subSideHeading: "rat",
comment: "Ash pokemon"
},
{
heading: "bulbasaur",
sideHeading: "green",
subSideHeading: "frog",
comment: "Ash pokemon"
},
{
heading: "pikachu",
sideHeading: "ash",
subSideHeading: "pet",
comment: "not in pokeball"
}
]
尋找可以讓我得到這個輸出的 lodash 方法:
[
{
heading:"pikachu",
sideHeading:
[
{
sideHeading:"yellow",
subSideHeading:
[
{
subSideHeading: "electric",
comment: "its a pokemon"
},
{
subSideHeading: "rat",
comment: "Ash pokemon"
}
]
},
{
sideHeading:"ash",
subSideHeading:[
{
subSideHeading: "pet",
comment: "not in pokeball"
}
]
}
]
},
{
heading:"bulbasaur",
sideHeading:
[
{
sideHeading:"green",
subSideHeading:
[
{
subSideHeading: "frog",
comment: "Ash pokemon"
}
]
}
]
}
]
我非常努力地參考 lodash 文檔和堆棧溢出問題,並使用了像chain
groupBy
each
map
filter
這樣的方法,但運氣對我不利。 任何人都可以提出解決這個問題的解決方案或將我引導到正確的路徑。
它並不完美,但這正是您需要它做的。
const data = [ { heading: "pikachu", sideHeading: "yellow", subSideHeading: "electric", comment: "its a pokemon" }, { heading: "pikachu", sideHeading: "yellow", subSideHeading: "rat", comment: "Ash pokemon" }, { heading: "bulbasaur", sideHeading: "green", subSideHeading: "frog", comment: "Ash pokemon" }, { heading: "pikachu", sideHeading: "ash", subSideHeading: "pet", comment: "not in pokeball" } ]; function getNested(dt, key, value, ...nestedArgs) { return _.chain(dt) .groupBy(key) .map((v, k) => { const nestedData = _.map(v, ({ [key]: kv, ...rest }) => rest); const [nextVal, ...restOfArgs] = nestedArgs; return { [key]: k, [value]: _.isNil(nextVal) ? nestedData : getNested.apply(null, [nestedData, value, nextVal].concat(restOfArgs)) }; }) .value(); } console.log(getNested(data, 'heading', 'sideHeading', 'subSideHeading')); //console.log(group);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.