Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的apply.map函数引用的原始对象_Javascript_Ecmascript 6 - Fatal编程技术网

JavaScript中的apply.map函数引用的原始对象

JavaScript中的apply.map函数引用的原始对象,javascript,ecmascript-6,Javascript,Ecmascript 6,我从json文件中读取数据并将其存储在javascript中的对象中,我使用d3js库读取该文件 这是data.json文件中原始数据的样子: { "bitcoin": [ { "24h_vol": null, "date": "12/5/2013", "market_cap": null, "price_usd": null }, {

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

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

{
    "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
        },...]
    }
我读了这篇文章,然后过滤掉一些空条目,并分别解析日期和整数值,这是相同的代码:

//Get data
d3.json("data/coins.json").then((data) => {

    console.log("original data", data.bitcoin);
        /*---
    original data (1633) [{…}, , …]

    [0 … 99]

    0: {24h_vol: null, date: "12/5/2013", market_cap: null, price_usd: null}
    1: {24h_vol: null, date: "13/5/2013", market_cap: null, price_usd: null}
    2: {24h_vol: "0", date: Tue May 14 2013 00:00:00 GMT-0400 (Eastern Daylight Time), market_cap: 1500517590, price_usd: 135.3}
    ...
    --------*/


    //Selector listener
    $("#coin-select").change(function() {
        var coinType =this.value;
        var coinData = data[coinType];
        var cleanData = coinData.filter((d) => {
                return (d.price_usd)
            }).map((d) => {
            d.price_usd =+ d.price_usd;
            d.market_cap =+ d.market_cap;
            d.date = parsedDate(d.date);
            return d;
        });
        console.log("cleanData", cleanData)

    /*------
    cleanData  (1631) [{…}, {…}, , …]
    [0 … 99]
    0: {24h_vol: "0", date: Tue May 14 2013 00:00:00 GMT-0400 (Eastern Daylight Time), market_cap: 1500517590, price_usd: 135.3}
    1: {24h_vol: "0", date: Wed May 15 2013 00:00:00 GMT-0400 (Eastern Daylight Time), market_cap: 1575032004, price_usd: 141.96}

    ---*/
    update(cleanData);
    });

    //Default to bitcoin
    $('#coin-select')
       .val('bitcoin')
       .trigger('change');

});
正如您可以看到的控制台输出,原始数据也解析了日期、市值和价格的值,不知道为什么会发生这种情况

谢谢你抽出时间


PS:这不仅仅发生在问题中提到的chrome中:

试试这样:

$("#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);
});

这确保您从
映射返回一个新对象
,这样您就不会对原始对象进行
变异
,也会清除一些不需要的显式返回。

对象通过Ref传递,而不是Val。如果要保留原始对象,您需要以创建新对象的方式执行操作,例如,您可以
.map(d=>({…d,price_usd:d.price_usd+d.price_usd,market_cap:d.market_cap+d.market_cap,date:parsedDate(d.date)})在地图中
,创建一个新对象,而不是修改并返回当前对象。可能重复@vnt,这与在其他浏览器上发生的情况不同too@KevinB这似乎有效,但我仍然不完全理解,代码中没有这一行:var coinData=data[coinType];将“数据”对象与“coinData”对象分离。似乎不明白为什么在map函数对象中使用“coinData”会更改原始数据对象不确定如何使用.map的箭头函数。一个字母一个字母地复制似乎会产生语法错误。在对象文本中有一个额外的逗号。再次尝试是的,但似乎也缺少了一个结束括号,你能改变它吗?如果可能的话,你能让新对象的创建更加明确吗?也许这只是我的观点,但对于像我这样的ECMAScript 6 noobs来说,它可能更清晰一些