2 回答

TA貢獻1875條經驗 獲得超3個贊
您可以通過避免不需要的循環屬性來對數據進行分組。
const
data = [{ country: "USA", state: "FLORIDA", city: "city1" }, { country: "USA", state: "FLORIDA", city: "city2" }, { country: "USA", state: "FLORIDA", city: "city3" }, { country: "USA", state: "ALASKA" }, { country: "USA", state: "ALBAMA" }],
keys = ['country', 'state', 'city'],
result = data.reduce((loop, o) => {
keys
.map(k => o[k])
.filter(Boolean)
.reduce((r, value) => {
let temp = (r.loop ??= []).find(q => q.value === value);
if (!temp) r.loop.push(temp = { sequence: r.loop.length + 1, value });
return temp;
}, { loop });
return loop;
}, []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

TA貢獻1830條經驗 獲得超9個贊
你可以寫你的transform
使用flatMap
和遞歸 -
const transform = ([ name, ...more ], { value, loop = [{}] }, r = {}) =>
? name === undefined
? ? ? [ r ]
? ? : loop.flatMap(t => transform(more, t, { [name]: value, ...r }))
const records =
? {sequencer:1,value:'USA',loop:[{sequencer:1,value:'FLORIDA',loop:[{sequencer:1,value:'city1'},{sequencer:2,value:'city2'},{sequencer:3,value:'city3'}]},{sequencer:2,value:'ALASKA'},{sequencer:3,value:'ALBAMA'}]}
const columns =
? ['country', 'state', 'city']
const result =
? transform(["country", "state", "city"], records)
??
console.log(JSON.stringify(result, null, 2))
function等同于上述表達式的語句=>-
function transform
? ( [ name, ...more ]
? , { value, loop = [{}] }
? , r = {}
? )
? { if (name === undefined)
? ? ? return [ r ]
? ? else?
? ? ? return loop.flatMap
? ? ? ? ( t =>
? ? ? ? ? ? transform
? ? ? ? ? ? ? ( more
? ? ? ? ? ? ? , t
? ? ? ? ? ? ? , { [name]: value, ...r }
? ? ? ? ? ? ? )
? ? ? ? )
? }
添加回答
舉報