我在JavaScript中应用.map函数时引用的原始对象

时间:2018-11-09 21:52:33

标签: javascript ecmascript-6

我正在从json文件中读取数据并将其存储在javascript中的对象中,我正在使用d3js库读取该文件。

这是data.json文件中原始数据的样子:

UNIQUE

我阅读了这篇文章,然后过滤掉一些空条目,还分别解析了日期和整数值,这是相同的代码:

{
    "bitcoin": [
        {
            "24h_vol": null,
            "date": "12/5/2013",
            "market_cap": null,
            "price_usd": null
        },
        {
            "24h_vol": null,
            "date": "13/5/2013",
            "market_cap": null,
            "price_usd": null
        },
        {
            "24h_vol": "0",
            "date": "14/5/2013",
            "market_cap": "1500517590",
            "price_usd": "135.3"
        },...]
 "bitcoin_cash": [
        {
            "24h_vol": null,
            "date": "12/5/2013",
            "market_cap": null,
            "price_usd": null
        },
        {
            "24h_vol": null,
            "date": "13/5/2013",
            "market_cap": null,
            "price_usd": null
        },...]
    }

正如您看到的控制台输出所示,原始数据也已解析了date,market_cap和price_usd的值,不确定为什么会这样。

感谢您的时间。

PS:不仅会在问题Is Chrome's JavaScript console lazy about evaluating arrays?

中建议在Chrome中发生这种情况

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

$("#coin-select").change(function() {
    var coinType = this.value;
    var coinData = data[coinType];
    var cleanData = coinData.filter(x => x.price_usd)
      .map(d => ({
        price_usd: d.price_usd =+ d.price_usd,
        market_cap: d.market_cap =+ d.market_cap,
        date: parsedDate(d.date)
      }));
    update(cleanData);
});

这可确保您从map返回一个新对象,这样就不会mutate原始对象,并且还会清理掉一些不需要的显式返回。