没有“循环”
你可以做这个疯狂的招(不是说这是最好的方式,但你不通过JSON循环这样):
var myData = { 'Put Your Data': 'HERE' };
function getCodes(name, data) {
var sv = data.match(new RegExp(name+'([\\S\\s]*?}][\\S\\s]*?}])'))[1].match(/zipCodes":\[(.*?)\]/g), r = [];
sv.forEach(function (item) {
item.match(/\d+/g).forEach(function (sub) {
r.push(+sub);
});
});
return r;
}
getCodes('India', JSON.stringify(myData));
如果你的数据已经是字符串,那么你不需要JSON.stringify
。您看到的forEach
实际上并不是通过JSON“循环”。它已经提取了邮政编码,代码只是将邮政编码添加到数组中。 。这条线:
var sv = JSON.stringify(data).match(new RegExp(name+'([\\S\\s]*?}][\\S\\s]*?}])'))[1].match(/zipCodes":\[(.*?)\]/g), r = [];
是很有吸引力的邮政编码,它会是这样的:
["zipCodes":["768019","768020"]"]
下一行:
item.match(/\d+/g)
会抢了号码,如输出的东西:
["768019", "768020"]
The loo p只是增加了拉链码到另一个阵列
随着循环
你最好通过JSON循环:
var myData = {}, // Your data
zips = [];
myData.countries.forEach(function(i) {
if (i.name === 'India') {
i.states.forEach(function(j) {
j.cities.forEach(function(l) {
l.zipCodes.forEach(function(m) {
zips.push(m);
});
});
});
}
});
//use "zips" array
性能和速度测试
经过测试复制阵列约500MB(半个演出)花费约30秒。好多啊。考虑到一个非常大的JSON将约为5MB,循环通过一点点5MB的JSON需要约0.14秒。你不应该担心速度。
你不能。除非你已经知道阵列中的位置。假设你刚刚展示了一个样本,并且你的真实数据有很多国家,每个国家都有许多州和城市? – nnnnnn
@ vihan1086 - 是的,但“时髦的技巧”实际上并没有比循环播放更好,是吗?我的意思是,你可以例如在(未解析的)JSON上使用正则表达式,但你为什么要这样做? – nnnnnn
@nnnnnn是的,所以有很多数据要遍历,我想知道是否有任何有效的方法来做到这一点。 – user1502144