更改对象数据

时间:2018-12-13 21:33:16

标签: javascript node.js object

我有一个文本文件(800kb url),其中存储了一些JSON数据。从文本文件加载数据后,我想更改内容并循环遍历。

我使用这个简单的示例函数来完成此操作;

var convertPriceFormat = function(content){
  var obj = {};

  for(var appid in content){

    var gameEntry = content[appid];

    for(var hashName in gameEntry){
      var entry = gameEntry[hashName];
      obj[hashName] = entry.price;
    };

    console.log(Object.keys(gameEntry).length);
  };

  return obj;
}

返回的对象中有四个子对象,它们都有大约3000个条目,这不是一个很大的数目。

每个条目的所有数据都是这样构造的;

'Pinstripe Suit Jacket': { 
                           average_price: 0.02,
                           listings: 11,
                           volume: 1185.03,
                           price: 0.03 
}

问题是;由于某些奇怪的原因,当我记录gameEntry的长度(即每个子对象的条目总数)时,第一个日志和第二个日志之间大约有12秒的时间。

这是为什么?

加载时间(自开始以来的相对时间,数字是必须循环的条目数):

2373 '3.48s'
5769 '24.422s'
1405 '25.326s'
641 '25.436s'

2 个答案:

答案 0 :(得分:0)

该条目很可能看起来并不像您认为的那样。尝试使用此代码或其变体来跟踪正在发生的事情。

btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (!playPause) {
                btn.setText("Pause Streaming");

                if (initialStage) {
                    new Player().execute(String.valueOf(stream));
                } else {
                    if (!mediaPlayer.isPlaying())
                        mediaPlayer.start();
                }

                playPause = true;

            } else {
                btn.setText("Start Streaming");

                if (mediaPlayer.isPlaying()) {
                    mediaPlayer.pause();
                }

                playPause = false;
            }
        }
    });

答案 1 :(得分:0)

使用hasOwnProperty过滤循环中的内容。

var convertPriceFormat = function (content) {
    var obj = {};
    for (var appid in content) {
        var gameEntry = content[appid];
        for (var hashName in gameEntry) {
            var entry = gameEntry[hashName];
            obj[hashName] = entry.price;
        };
    };
    return obj;
}

var convertPriceFormat2 = function (content) {
    var obj = {};
    for (var appid in content) {
        if (content.hasOwnProperty(appid)) {
            var gameEntry = content[appid];
            for (var hashName in gameEntry) {
                if (gameEntry.hasOwnProperty(hashName)) {
                    var entry = gameEntry[hashName];
                    obj[hashName] = entry.price;
                }
            }
        }
    }
    return obj;
}

const entry1 = {
    'Pinstripe Suit Jacket': {
        average_price: 0.02,
        listings: 11,
        volume: 1185.03,
        price: 0.03
    }
}

const entries = []

for (let i = 0; i < 3000; i++) {
    entries.push(entry1)
}

console.log(`Number of entries: ${entries.length}`)

console.time("time")
convertPriceFormat(entries)
console.timeEnd("time")

console.time("time2")
convertPriceFormat2(entries)
console.timeEnd("time2")

平均结果更好

svg-inline-loader