我有一个文本文件(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'
答案 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")
平均结果更好