Arrays rxjs/Angular2循环,但显示单个关联数组的不同对象

Arrays rxjs/Angular2循环,但显示单个关联数组的不同对象,arrays,angular,rxjs6,Arrays,Angular,Rxjs6,我最近使用rxjs组合了两个阵列 MyArray = [{ "Field": ["Cars"], "Type": ["BMW", "Toyota", "Volvo"] }, { "Field": ["House"], "Type": ["Condominium", "TownHouse"], } PriceArray = [ {

我最近使用rxjs组合了两个阵列

  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],
    }]