You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase新手求助:如何从复杂JS对象中提取日期字段

如何从Firebase的复杂对象数组中提取日期字段?

问题描述

我是Firebase和JavaScript新手,正尝试从复杂对象数组中获取数据,需要提取每条记录中的日期(如'02-01-2018')。目前我已获取到键,但不知道如何访问该日期。以下是我的数据库结构、返回值示例及相关代码:

数据库结构示例

{
  "dailyPrices": {
    "01-50005": {
      "04-01-2018": {
        "brands": "",
        "editorID": "janeef@janeef.com",
        "name": "dddf",
        "phone": "",
        "place": "errr"
      },
      "09-01-2018": {
        "brandPriceList": [{
            "brandName": "DC",
            "rsp": "400",
            "stock": "21",
            "supplierChange": "hhhh",
            "supplierRegular": "",
            "wsp": "350"
          },
          {
            "brandName": "Barti",
            "rsp": "385",
            "stock": "54",
            "supplierChange": "",
            "supplierRegular": "",
            "wsp": "d380"
          }
        ],
        "brands": "",
        "editorID": "janeef@janeef.com",
        "name": "dddf",
        "orderRequirement": {
          "casualRequirements": "",
          "followUpDate": "",
          "followUpRemarks": "",
          "noOfBags": "",
          "prospectiveness": "",
          "scheduledOrderDate": "",
          "scheduledOrderRemarks": "",
          "urgentRequirementRemarks": "",
          "urgentRequirements": ""
        },
        "phone": "",
        "place": "errr"
      }
    }
  }
}

HTML代码

<input type="text" name="ordDetailTXT" id="ordDetailTXT" value="dailyPrice">

JavaScript代码

function findOrderDetails(parentKey) {
  var returnArr = [];
  var fetchRecord = database.ref(parentKey);
  fetchRecord.on('value', function(snapshot) {
    var item = snapshot.val();
    item.key = snapshot.key;
    returnArr.push(item);
  });
}
function btnClickedOrdDetails(){
  var parentkey = ("#ordDetailTXT").val();
  findOrderDetails(parentKey);
}

请求帮助实现提取日期字段的功能。


解决方案

别担心,我来一步步帮你搞定这个问题!首先要明确:你的数据里,日期其实是子节点的键(比如"04-01-2018"),不是某个字段的值,所以我们需要遍历这些子节点来拿到日期。先帮你修正现有代码的小问题,再实现核心功能:

1. 先修正基础代码的小错误

你的btnClickedOrdDetails函数里有两个小问题,会导致代码跑不起来:

  • jQuery选择器少了$符号,应该是$("#ordDetailTXT").val()
  • 变量名parentkey和函数参数的parentKey大小写不一致,会导致传参失败

修正后的函数:

function btnClickedOrdDetails(){
  var parentKey = $("#ordDetailTXT").val(); // 修正选择器和变量名
  findOrderDetails(parentKey);
}

另外注意:你的输入框value是dailyPrice,但数据库里的节点是dailyPrices(多了个s),建议把输入框的value改成dailyPrices,不然会找不到数据哦!

2. 提取日期键的核心逻辑

用Firebase快照的forEach方法遍历子节点,就能直接拿到每个日期的键。我帮你重写了findOrderDetails函数,不仅能提取日期,还能同时获取日期对应的详细数据:

function findOrderDetails(parentKey) {
  var dateList = []; // 用来存储所有提取到的日期
  var fetchRecord = database.ref(parentKey);
  
  fetchRecord.on('value', function(snapshot) {
    // 遍历dailyPrices下的每个商品节点(比如"01-50005")
    snapshot.forEach(function(productSnapshot) {
      // 遍历当前商品下的所有日期节点
      productSnapshot.forEach(function(dateSnapshot) {
        var dateKey = dateSnapshot.key; // 这里就是你要的日期,比如"04-01-2018"
        dateList.push(dateKey);
        
        // 如果需要同时获取日期对应的详细数据,就用下面这行
        var dateData = dateSnapshot.val();
        console.log(`日期:${dateKey} 对应的详细数据:`, dateData);
      });
    });
    
    // 提取完成后,你可以用dateList做后续操作,比如渲染到页面
    console.log("所有提取到的日期:", dateList);
  });
}

3. 额外优化:获取去重的日期列表

如果同一个日期出现多次,想要去重的话,可以用Set来处理:

var uniqueDates = [...new Set(dateList)];
console.log("去重后的日期列表:", uniqueDates);

这样就能轻松拿到所有日期啦!

内容的提问来源于stack exchange,提问作者Ishtiaq Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:42:19