Javascript 组合两个结构完全相同的阵列对象

Javascript 组合两个结构完全相同的阵列对象,javascript,angular,Javascript,Angular,我正在实现一个从json文件中提取黑名单术语列表的服务 @Injectable() export class BlacklistService { private readonly BLACKLIST_FOLDER = './assets/data/web-blacklist'; private readonly blacklistEnglishTerms: any; private readonly blacklistFrenchTerms: any; constructor

我正在实现一个从json文件中提取黑名单术语列表的服务

@Injectable()
export class BlacklistService {
  private readonly BLACKLIST_FOLDER = './assets/data/web-blacklist';
  private readonly blacklistEnglishTerms: any;
  private readonly blacklistFrenchTerms: any;

  constructor(
    public httpClient: HttpClient
  ) {
    this.blacklistEnglishTerms = this.httpClient.get(`${this.BLACKLIST_FOLDER}/en.json`);
    this.blacklistFrenchTerms = this.httpClient.get(`${this.BLACKLIST_FOLDER}/fr.json`);
  }

  public getAllBlackListTerms(): Observable<any> {
    return combineLatest([
      this.blacklistEnglishTerms,
      this.blacklistFrenchTerms
    ]);
  }
}
我检索组件中的所有项,如下所示:

this.blacklistService.getAllBlackListTerms().pipe(takeUntil(this.ngUnsubscribe)).subscribe(blacklistTerms => {
  console.log(blacklistTerms);
});
blacklistTerms
以2个数组对象的数组形式返回。如何将这两个对象合并为一个对象(两者具有相同的结构)


给定,您已经知道结果,即您知道bolth的结果观察结果只有一个键:黑名单您可以修改您的服务,如:

public getAllBlackListTerms(): Observable<any> {
    return zip(
        this.blacklistEnglishTerms,
        this.blacklistFrenchTerms
    ).pipe(map([first, second]) => {
        return { blackList: [...first.blackList, ...second.blackList]};
    });
}
public getAllBlackListTerms():可观察{
回程拉链(
这是blacklistEnglishTerms,
这是黑名单法语术语
).pipe(映射([第一,第二])=>{
返回{blackList:[…first.blackList,…second.blackList]};
});
}
我还将
combinelatetest()
替换为
zip()
,因为您可能只需要在两者都发出值时才需要结果。

尝试使用like
blacklistTerms.flatMap(x=>x.blacklist)

测试如下

let blacklistTerms=[
{黑名单:[0,1,2]},
{黑名单:[2,3]}
];

log(blacklisterms.flatMap(x=>x.blacklist))请尝试以下方法

var s=[{a:[1,2,3]},{a:[6,7,8]}]
var obj={}
为了(让我进来){
如果(!obj['a']){obj['a']=s[i]['a'];}
否则{
obj['a'].push(…s[i]['a'])
}
}

console.log(obj)
黑名单是一个数组-即使是一个简单的concat也能帮上忙

var blacklistEnglishTerms={
“黑名单”:[
“a”,
“b”,
“c”
]
}
var blacklistFrenchTerms={
“黑名单”:[
“e”,
“f”,
“g”
]
}
log(blacklistEnglishTerms.blacklist.concat(blacklistFrenchTerms.blacklist))
我想您可以使用concat()。
concat()用于组合两个数组

public getAllBlackListTerms():可观察{
return combinelatetest=this.blacklistEnglishTerms.concat(this.blacklistengfrenchterms);

}
您可以使用
blacklistTerms.flatMap(x=>x.blacklist)
public getAllBlackListTerms(): Observable<any> {
    return zip(
        this.blacklistEnglishTerms,
        this.blacklistFrenchTerms
    ).pipe(map([first, second]) => {
        return { blackList: [...first.blackList, ...second.blackList]};
    });
}
this.blacklistService.getAllBlackListTerms().pipe(takeUntil(this.ngUnsubscribe)).subscribe(blacklistTerms => {
  console.log(blacklistTerms.flatMap(x => x.blacklist));
});