Arrays rxjs/Angular2循环,但显示单个关联数组的不同对象
我最近使用rxjs组合了两个阵列Arrays rxjs/Angular2循环,但显示单个关联数组的不同对象,arrays,angular,rxjs6,Arrays,Angular,Rxjs6,我最近使用rxjs组合了两个阵列 MyArray = [{ "Field": ["Cars"], "Type": ["BMW", "Toyota", "Volvo"] }, { "Field": ["House"], "Type": ["Condominium", "TownHouse"], } PriceArray = [ {
MyArray = [{
"Field": ["Cars"],
"Type": ["BMW", "Toyota", "Volvo"]
},
{
"Field": ["House"],
"Type": ["Condominium", "TownHouse"],
}
PriceArray = [
{
field: Cars,
distribution: [{"name" : "BMW","price":2},{"name" : "Toyota","price":3}]
},
{
field: People,
distribution: [{"name" : "Condominium","price":3},{"name" : "TownHouse","price":2}]
}]
使用rxjs过滤器
const $MergeData = MyArray.map(val => {
return Object.assign({}, val,this.PriceArray.filter(v => v.Field === val.field)[0])
});
this.mergedArray = $MergeData;
现在看起来是这样
mergedArray = [{
"Field": "Cars",
"Type": ["BMW", "Toyota", "Volvo"],
"field" : "Cars",
"distribution" : [
{
"name" : "BMW"
"price": 2 ,
},
{
"name" : "Toyota"
"price": 3 ,
},
{
"name" : "Toyota"
"price": 4 ,
}
]
}, .... (house array here)];
然后,我试图显示项目的价格,但它不工作
<div *ngFor="let item of mergedArray">
<div *ngFor="let car of item.Field; let i = index">
<p>{{car}} </p>
<p>{{item.distribution.price[i]}} </p>
</div>
</div>
希望它可能更容易循环。我认为这是理想的效果,还请记住,当使用
Array.prototype.filter
并且没有元素通过测试时,返回的值将是[]
,如果您尝试访问[][0]
元素,则返回的值将是未定义的,之后,如果您试图从该未定义的值访问某些属性,它将抛出一个错误
例如,如果您试图访问沃尔沃的价格,它将抛出一个错误无法读取未定义的
的属性“price”,因为沃尔沃不存在于价格数组中
让priceArray=[
{
“名称”:“宝马”,
“价格”:2
},
{
“名称”:“丰田”,
“价格”:3
},
{
“名称”:“丰田”,
“价格”:4
}
];
设myArray=[{
“字段”:“汽车”,
“类型”:[“宝马”、“丰田”、“沃尔沃”]}]
让findPrice=(priceArray,mark)=>priceArray
.find(x=>x.name==mark)
? priceArray.find(x=>x.name==mark).price
:“没有数据”
让mergedArray=myArray[0]。Type.map(x=>({[x]:findPrice(priceArray,x)}))
console.log(mergedArray)
我真的不知道rxjs在这里起到了什么作用——看起来这只是两个数组而已。对代码只做了一些注释,使用Object是一个很好的做法。Assing(或…
扩展操作符)保持一切整洁并避免突变,过滤以搜索某些属性等等,但我建议您更深入地查看mdn文档,这样您就可以丰富您的js火炮,正如爆炸药丸所提到的,这确实更像是pureJS而不是rxjs。很抱歉,我没有包括导致PriceArrayTanks输出的rxjs作为答案,我忘了说明字段在阵列中的重要性。。对不起,我编辑了数组。你能编辑代码吗?我用正确的数组编辑了我上面的问题。你能用这个问题创建一个stackblitz演示吗?因为我认为我不完全理解你的问题。
mergedArray = [{
"Field": "Cars",
"Type": ["BMW": 2, "Toyota" : 3, "Volvo" : 4],
}]