Javascript 组合两个结构完全相同的阵列对象
我正在实现一个从json文件中提取黑名单术语列表的服务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
@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()
,因为您可能只需要在两者都发出值时才需要结果。尝试使用likeblacklistTerms.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));
});