Исходный объект, на который я ссылаюсь при применении функции .map в JavaScript - PullRequest
0 голосов
/ 10 ноября 2018

Я читаю данные из файла 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');

});

Как вы видите на выходе консоли, исходные данные также проанализировали значения для date, market_cap и price_usd, но не уверены, почему это происходит.

Спасибо за ваше время.

PS: это не только происходит в chrome, как предлагается в вопросе: Неужели консоль JavaScript в Chrome ленится при оценке массивов?

1 Ответ

0 голосов
/ 10 ноября 2018

Попробуйте что-то вроде этого:

$("#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 оригинале, а также очистите некоторые из явных возвращений, которые у вас были, которые не нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...