我撰寫了一個函式,它獲取應回傳的通用物件和屬性(鍵)的資料:
resultToArray<T>(
data: T[],
prop: (keyof T | ((row: T) => string))[] = []
): string[][] {
// data: [{id: 1, name: 'first'}, {id: 2, name: 'second'}] -> [[1, 'first'], [2, 'second']]
// prop: ['id', 'name']
if (prop.length === 0) {
return data.map(Object.values);
} else {
const output = data.map(d => {
const a: string[] = [];
for (let i = 0; i < prop.length; i ) {
a.push(d[prop[i]])
}
return a;
});
return output
}
}
示例輸入:
data-
[
{ name: 'Name', address: 'Address', branch: { locale: 'Locale' } },
{ name: 'Name2', address: 'Address2', branch: { locale: 'Locale2' } }
]
prop —— [ 'name', (d) => d.branch.locale ]
輸出應該是 [['Name', 'Locale'], ['Name2', 'Locale2']]
函式對于簡單鍵作業正常,但對于嵌套鍵不起作用
uj5u.com熱心網友回復:
我相信一個簡單的解決方案(用純 js 測驗)是檢查 prop[i] 的型別并拆分使用的功能。
for (let i = 0; i < prop.length; i ) {
if (typeof prop[i] === 'string') {
a.push(d[prop[i]]);
} else {
a.push(prop[i](d));
}
}
您必須使用資料作為引數運行該函式才能實際獲得輸出。
輸入:
resultToArray(
[
{ name: 'Name', address: 'Address', branch: { locale: 'Locale' , extra: { data: 'Country1' } } },
{ name: 'Name2', address: 'Address2', branch: { locale: 'Locale2', extra: { data: 'Country2' } } }
],
[ 'name', (d) => d.branch.locale, (d) => d.branch.extra.data ]
);
輸出:
[
[ 'Name', 'Locale', 'Country1' ],
[ 'Name2', 'Locale2', 'Country2' ]
]
uj5u.com熱心網友回復:
您需要檢查要提取的“道具”是否是一個函式并呼叫它。
for (let i = 0; i < prop.length; i ) {
const propToUse = prop[i];
let value;
if (typeof propToUse === 'function') {
value = propToUse(d);
} else {
value = d[propToUse];
}
a.push(value);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/313548.html
標籤:javascript 数组 打字稿 算法 嵌套
