首页 > 解决方案 > 更改对象数据

问题描述

我有这个文本文件(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'

标签: javascriptnode.jsobject

解决方案


很可能该条目看起来并不像您认为的那样。试试这个代码或它的变体来追踪正在发生的事情。

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

  for (var appid in content) {
    console.log(`appid: ${appid}`)

    var gameEntry = content[appid];

    for (var hashName in gameEntry) {
        console.log(`hashName: ${hashName}`)

      var entry = gameEntry[hashName];
      obj[hashName] = entry.price;
    };

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

  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}`)

convertPriceFormat(entries.slice(0,3))


推荐阅读