【问题标题】:Why are elements not getting pushed into the array?为什么元素没有被推入数组?
【发布时间】:2019-08-11 03:58:36
【问题描述】:

我在react-native 应用程序中有以下代码。

responseJson 是我从 API 调用中得到的。

以下代码中的问题是,我推入resultJson 的元素在map 函数调用之外不存在,即resultJson 仅在map 调用resultJson 内部时仍为空确实得到更新。 quaterly 是一个数组,但它的值在 map 调用之后被保留。我为responseJson 添加了静态数据。

下面的代码有什么问题?

    let responseJson = { "Q1-2018": [ { "total_rows": 742, "avg_price": "2776280.6469", "avg_sqft_price": "1592.5728", "yr": 2018, "evidence": "ACT" }, { "total_rows": 133, "avg_price": "1381205.4436", "avg_sqft_price": "974.9925", "yr": 2018, "evidence": "MOR" }, { "total_rows": 147, "avg_price": "1730154.9524", "avg_sqft_price": "1472.4966", "yr": 2018, "evidence": "MOU" }, { "total_rows": 580, "avg_price": "1797097.3069", "avg_sqft_price": "2043.7190", "yr": 2018, "evidence": "TRA" }, { "total_rows": 61, "avg_price": "4075409.8361", "avg_sqft_price": "1415.8033", "yr": 2018, "evidence": "VAL" } ], "Q2-2018": [ { "total_rows": 1090, "avg_price": "2585032.2220", "avg_sqft_price": "1578.9303", "yr": 2018, "evidence": "ACT" }, { "total_rows": 199, "avg_price": "1426902.3769", "avg_sqft_price": "1060.0000", "yr": 2018, "evidence": "MOR" }, { "total_rows": 84, "avg_price": "1900348.8214", "avg_sqft_price": "1332.6071", "yr": 2018, "evidence": "MOU" }, { "total_rows": 638, "avg_price": "1810675.6536", "avg_sqft_price": "1681.9812", "yr": 2018, "evidence": "TRA" }, { "total_rows": 60, "avg_price": "2908750.0000", "avg_sqft_price": "1458.7667", "yr": 2018, "evidence": "VAL" } ], "Q3-2018": [ { "total_rows": 971, "avg_price": "2562323.0505", "avg_sqft_price": "1569.8218", "yr": 2018, "evidence": "ACT" }, { "total_rows": 192, "avg_price": "1574309.7813", "avg_sqft_price": "1175.7865", "yr": 2018, "evidence": "MOR" }, { "total_rows": 56, "avg_price": "1807243.6429", "avg_sqft_price": "1275.6607", "yr": 2018, "evidence": "MOU" }, { "total_rows": 371, "avg_price": "1629974.8113", "avg_sqft_price": "1389.6577", "yr": 2018, "evidence": "TRA" }, { "total_rows": 65, "avg_price": "1922692.3077", "avg_sqft_price": "1341.2615", "yr": 2018, "evidence": "VAL" } ], "Q4-2018": [ { "total_rows": 1426, "avg_price": "2541386.3191", "avg_sqft_price": "1527.2468", "yr": 2018, "evidence": "ACT" }, { "total_rows": 163, "avg_price": "1440970.0491", "avg_sqft_price": "952.3129", "yr": 2018, "evidence": "MOR" }, { "total_rows": 91, "avg_price": "1571781.8352", "avg_sqft_price": "1244.3077", "yr": 2018, "evidence": "MOU" }, { "total_rows": 429, "avg_price": "1626291.2727", "avg_sqft_price": "1434.8834", "yr": 2018, "evidence": "TRA" }, { "total_rows": 61, "avg_price": "1797540.9836", "avg_sqft_price": "1251.2623", "yr": 2018, "evidence": "VAL" } ], "Q1-2019": [ { "total_rows": 1391, "avg_price": "2755570.1855", "avg_sqft_price": "1457.6204", "yr": 2019, "evidence": "ACT" }, { "total_rows": 126, "avg_price": "1005182.1111", "avg_sqft_price": "812.4762", "yr": 2019, "evidence": "MOR" }, { "total_rows": 18, "avg_price": "1680666.6667", "avg_sqft_price": "1287.3333", "yr": 2019, "evidence": "MOU" }, { "total_rows": 362, "avg_price": "1769586.9586", "avg_sqft_price": "1506.7099", "yr": 2019, "evidence": "TRA" }, { "total_rows": 40, "avg_price": "1974375.0000", "avg_sqft_price": "1292.5500", "yr": 2019, "evidence": "VAL" }]};
    let resultJson = [];
    let avgJson = [];
    let quarterly = [];
    Object.keys(responseJson).map((value, key) => {
      quarterly.push(value);
      responseJson[value].map((value, key) => {
        const evidence = value.evidence;
        if (typeof resultJson[evidence] === "undefined") {
          resultJson[evidence] = [];
        }
        resultJson[evidence].push(value);
        console.log(
          "resultJson[evidence]",
          resultJson[evidence].length,
          resultJson[evidence]
        );
      });
    });

【问题讨论】:

  • 请点击edit 然后[<>] sn-p 编辑器创建一个minimal reproducible example - 你的代码没有任何反应
  • quarterly 在哪里/是什么?如果没有适当的示例数据,就无法推断代码中发生了什么。
  • 你说“responseJson 是我从 API 调用中得到的”。这是否意味着所有这些代码都在异步回调中?您是否尝试在异步调用之外访问它?
  • 需要一些变量
  • @MarkMeyer 不,我不想在异步调用之外访问它。是的,你是对的,它在异步回调中

标签: javascript arrays react-native scope


【解决方案1】:

您正在尝试访问数组中的键,就好像它是一个对象一样。 Javascript 以某种方式允许它,并且实际上存储了它们,所以你可以在之后执行 console.log(resultJson["ACT"]) 并仍然获得值。

但是让 resultJson 成为一个对象可能更有意义。

let resultJson = {}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2021-02-27
    • 2012-03-05
    • 2020-04-12
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    相关资源
    最近更新 更多