我正在使用 azure-devops-exstension-api 創建兩個陣列(每個陣列都有幾個嵌套陣列),一個使用內置的 GitRepository 介面,另一個使用內置的 GitCommitsRef 介面。我正在嘗試在 JSX.Element 表中使用這些陣列,并且當我使用我的任何一個陣列時效果都很好。但看起來我不能有多個 itemProviders(每個陣列一個),所以目前我只能使用一個或另一個。
我需要找到一種方法將每個陣列中的嵌套陣列合并在一起。這是我目前必須組裝兩個陣列的代碼:
private async initializeComponent() {
const projects = await getClient(CoreRestClient).getProjects();
var repositories = [] as GitRepository[];
var lastCommits = [] as GitCommitRef [];
console.log("Before Get repos")
for (let i = 0; i < projects.length; i ) {
const repos: GitRepository[] = await getClient(GitRestClient).getRepositories(projects[i].name);
console.log(repos);
repositories = repositories.concat(repos);
console.log(repositories);
}
//Sort the list in alphabetical on repository name
repositories = repositories.sort((a, b) => {
return a.name.localeCompare(b.name)
});
console.log("Retrieving commit Date");
//Retrieve last commit for each repo
for (let i = 0; i < repositories.length; i ){
const repoName: string = repositories[i].name;
const projName: string = repositories[i].project.name;
console.log("Repository: " repoName);
const filter: GitQueryCommitsCriteria = { $top: 1 }
console.log("Project: " projName);
console.log("Filter: " filter);
const commit: GitCommitRef[] = await getClient(GitRestClient).getCommits(repoName, filter, projName);
console.log(commit);
lastCommits = lastCommits.concat(commit);
console.log(lastCommits);
}
//var fullArray = lastCommits.concat(repositories); -attempt at concat
//repositories = [...lastCommits, ...repositories]; -attempt at Spread
this.setState({
projects: new ArrayItemProvider(projects),
gitRepos: new ArrayItemProvider(repositories),
gitCommits: new ArrayItemProvider(lastCommits),
nbrRepos: repositories.length
});
}
public render(): JSX.Element {
return (
<Page className="page-pivot flex-grow">
<Header title={"Their repositories (" this.state.nbrRepos ")"}
titleSize={TitleSize.Medium} />
<div className="git-list-pivot">
{
!this.state.gitRepos &&
!this.state.gitCommits &&
<p>Loading...</p>
}
{
this.state.gitRepos &&
this.state.gitCommits &&
<Table
columns={this.state.columns}
itemProvider={this.state.gitCommits}
/>
}
</div>
</Page>
);
}
我嘗試過各種方式和組合的 concat、spread 和 push,但到目前為止沒有任何效果。
目前,這兩個陣列如下(示例):
存盤庫 = [{名稱:名稱,大小:大小},{名稱:名稱,大小:大小}]
lastCommmits = [{作者:作者,commitId:commitId},{作者:作者,commitId:commitId}]
我希望完成的是:
finalArray = [{name: name, size: size, author: author, commitId: commitId}, {name: name, size: size, author: author, commitId: commitId}]
uj5u.com熱心網友回復:
只要您可以確信每個陣列中相同索引處的專案應該相關,并且兩個陣列的長度相同,那么它就非常簡單:
const finalArray = repositories.map((r, idx) => ({
...r,
...(lastCommits[idx] || {}),
}));
你也可以只用一個for回圈來實作它,它只是使用的代碼少了一點map。for例子:
const finalArray = [];
for (let i = 0; i < repositories.length; i ){
finalArray.push({
...repositories[i],
...lastCommits[i],
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/510426.html
