代码之家  ›  专栏  ›  技术社区  ›  FanaticTyp

嵌套json对象中数组过滤器的使用

  •  0
  • FanaticTyp  · 技术社区  · 6 年前

    我的目标是引用嵌套中的特定视图(A、B或C) json structure .

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

    这是使用过滤器的正确方法吗,因为我发现的所有示例在 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":""
                      }
                   ]
                }
             ]
          }
       ]
    }
    
    0 回复  |  直到 6 年前
        1
  •  2
  •   Nick Parsons Felix Kling    6 年前

    典型地 Array.prototype.find 用于根据内部函数是否返回true来查找数组中的特定元素。在你的例子中,你正在返回 x 你的目标是 views 数组,因此其计算结果为 true . 所以,你的 .find 只是返回 意见 数组(或者更具体地说是 意见 数组)。既然是这样,就没有必要 .find() 相反,你可以引用 意见 使用其索引:

    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']);
        2
  •  0
  •   Adrian Brand    6 年前
    .find(x => x)
    

    将返回数组中的第一个truthy项,任何不为true、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');