簡體   English   中英

嵌套json對象中數組過濾器的用法

[英]Usage of array filter in nested json object

我的目標是引用嵌套json structure的特定視圖(A,B或C)。

this.selected_table = this.all_tables.views.find(x => x)['A'];

這是使用過濾器的正確方法,因為我發現的所有示例在array.find()內部都有一些條件。 在我的情況下,它可以在沒有條件的情況下工作,但是我覺得在我的情況下, array.find()是不必要的嗎? 但是,我找不到其他方法。

JSON對象

all_tables = {  
   "views":[  
      {  
         "A":[  
            {  
               "id":"",
               "username":"",
               "status":"",
               "location":"",
               "positionen":[  
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  }
               ]
            },
            {  
               "id":"",
               "username":"",
               "status":"",
               "location":"",
               "positionen":[  
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  }
               ]
            }
         ],
         "B":[  
            {  
               "id":"",
               "username":"",
               "status":"",
               "location":"",
               "positionen":[  
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  }
               ]
            },
            {  
               "id":"",
               "username":"",
               "status":"",
               "location":"",
               "positionen":[  
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  }
               ]
            }
         ],
         "C":[  
            {  
               "id":"",
               "username":"",
               "status":"",
               "location":"",
               "positionen":[  
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  }
               ]
            },
            {  
               "id":"",
               "username":"",
               "status":"",
               "location":"",
               "positionen":[  
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  }
               ]
            }
         ]
      }
   ]
}

通常, Array.prototype.find用於根據內部函數是否返回true來查找數組中的特定元素。 在您的示例中,您返回的xviews數組中的對象,因此它的值為true 所以,你的.find簡直只是在你返回一個對象views陣列(或者更具體地說是在你的第一個對象views陣列)。 既然是這種情況,就不需要.find() ,而只需使用其索引在views引用該對象即可:

this.selected_table = this.all_tables.views[0]['A']

請參見下面的示例:

 all_tables = { "views":[ { "A":[ { "id":"a", "username":"", "status":"", "location":"", "positionen":[ { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" } ] }, { "id":"a2", "username":"", "status":"", "location":"", "positionen":[ { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" } ] } ], "B":[ { "id":"b", "username":"", "status":"", "location":"", "positionen":[ { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" } ] }, { "id":"b2", "username":"", "status":"", "location":"", "positionen":[ { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" } ] } ], "C":[ { "id":"c", "username":"", "status":"", "location":"", "positionen":[ { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" } ] }, { "id":"c2", "username":"", "status":"", "location":"", "positionen":[ { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" }, { "field1":"", "field2":"", "field3":"" } ] } ] } ] }; console.log(all_tables.views[0]['A']); console.log(all_tables.views[0]['C']); 

.find(x => x)

將返回數組中的第一項為真,否則為false,0,'',未定義或null。

不確定我是否完全遵循您的問題,但是您是否要查找包含A屬性的視圖,然后返回該屬性?

const getProp = (views, prop) => {
  const view = views.find(v => v[prop]);
  //Will return the first view that has a property called prop
  return view && view[prop]; // If it found one return the property
};

那你可以用

const prop = getProp(views, 'A');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM