代码之家  ›  专栏  ›  技术社区  ›  Fabian Mayer

键不是数字时的Foreach

  •  1
  • Fabian Mayer  · 技术社区  · 2 年前

    在我的项目中,我将数组推入firebase实时数据库的表中。Firebase为每个数组生成令牌而不是数字id:

    {
        "-N2mToYDj-i8ToErmaUj": {
            "anzahl": 2,
            "groesse": 0.5,
            "name": "getraenk1",
            "preis": 5.5
        },
        "-N2mX3RPnDXxWMHMJScy": {
            "anzahl": 1,
            "groesse": "0.25",
            "name": "getraenk2",
            "preis": 2.2
        },
        "-N2mXBT8c7EKlIgyrU72": {
            "anzahl": 1,
            "groesse": "0.5",
            "name": "getraenk3",
            "preis": 3.4
        },
        "-N2mXZD1BoCslj81Lcya": {
            "anzahl": 1,
            "groesse": "1",
            "name": "getraenk4",
            "preis": 5.2
        "-N2m_g8GutpAFqsN4WsP": {
            "anzahl": 1,
            "groesse": "0.33",
            "name": "getraenk5",
            "preis": 3.2
        },
    }

    3 回复  |  直到 2 年前
        1
  •  1
  •   Samathingamajig    2 年前

    Object.values . 如果您也关心键,请将结果包装在 Object.entries

    const data = {"-N2mToYDj-i8ToErmaUj":{"anzahl":2,"groesse":0.5,"name":"getraenk1","preis":5.5},"-N2mX3RPnDXxWMHMJScy":{"anzahl":1,"groesse":"0.25","name":"getraenk2","preis":2.2},"-N2mXBT8c7EKlIgyrU72":{"anzahl":1,"groesse":"0.5","name":"getraenk3","preis":3.4},"-N2mXZD1BoCslj81Lcya":{"anzahl":1,"groesse":"1","name":"getraenk4","preis":5.2},"-N2m_g8GutpAFqsN4WsP":{"anzahl":1,"groesse":"0.33","name":"getraenk5","preis":3.2}};
    
    Object.values(data).forEach(value => console.log("value", value));
    
    console.log("===================");
    Object.entries(data).forEach(([key, value]) => console.log("key", key, "value", value));
        2
  •  1
  •   Daniel Black    2 年前

    看起来你得到的是一个对象而不是一个列表,这就是为什么forEach不工作的原因。您需要遍历返回对象的键,并以这种方式提取相应的记录。

    您可以这样做来循环键:

    var object = {"one":"data-1","two":"data-2"}
    var keys = Object.keys(object)
    keys.forEach(function(key){
        console.log(key); 
        console.log(object[key])
    })
    
        3
  •  0
  •   Hossein hossein    2 年前

    假设您的数据存储在 test 对象 您可以使用 Object 函数以处理任何对象。要访问所有密钥,您可以尝试以下操作:

    Object.keys(test).map(key => { // key in here can be for example -N2mToYDj-i8ToErmaUj
        const data = test[key] // this is the full object that each key points to
    /* 
       {
            "anzahl": 2,
            "groesse": 0.5,
            "name": "getraenk1",
            "preis": 5.5
        }
    */
    })