Javascript中的"for ... in"循环是否按照声明的顺序循环遍历hashtables/elements?是否有一个浏览器没有按顺序执行?
我想要使用的对象将被声明一次,永远不会被修改.
假设我有:
var myObject = { A: "Hello", B: "World" };
Run Code Online (Sandbox Code Playgroud)
我进一步使用它们:
for (var item in myObject) alert(item + " : " + myObject[item]);
Run Code Online (Sandbox Code Playgroud)
在大多数体面的浏览器中,我可以期待'A:'你好''总是先来'B:'世界"吗?
我有一个JSON对象,它在页面加载时启动,如下所示:
data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;
Run Code Online (Sandbox Code Playgroud)
有没有办法在第一个元素之前注入foo元素,这样在执行a时for var i in data,新元素将在启动对象时添加的元素之前循环?
原因是,我正在向用户显示一些项目.当用户通过javascript添加新项目时,我希望这个新项目显示在所有现有项目之上,但是当我添加新项目时,即
data[newItem] = newItem;
Run Code Online (Sandbox Code Playgroud)
然后JSON对象如下所示:
data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;
data[newItem] = newItem;
Run Code Online (Sandbox Code Playgroud)
而不是我想要的,这是:
data[newItem] = newItem;
data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
场景:考虑我有一个JSON文档如下:
{
"name": "David",
"age" : 78,
"NoOfVisits" : 4
}
Run Code Online (Sandbox Code Playgroud)
问题:我想改变文档中字段的顺序/顺序,比如我想要age,NoOfVisits然后最后name.
截至目前,我将值存储在临时变量中,删除字段并重新创建相同的字段.由于重新分配不起作用:(
我是按照以下方式做到的:
temp = doc["age"];
delete doc['age'];
doc["age"] = temp;
temp = doc["NoOfVisits "];
delete doc['NoOfVisits '];
doc["NoOfVisits"] = temp;
temp = doc["name"];
delete doc['name'];
doc["name"] = temp;
Run Code Online (Sandbox Code Playgroud)
这样我就可以获得所需的有序JSON文档.这个要求是特殊的,但我仍然需要一些有效的解决方案
问题:有人可以用有效的方法帮助实现同样的目标吗?
我正在阅读如何在JavaScript中获取查询字符串值?在Stackoverflow和第一个回复的这段代码让我想知道为什么'vars.push()'像这样使用?
function getUrlVars()
{
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}
Run Code Online (Sandbox Code Playgroud)
但不是这样的:
var vars=[];
...
vars.push(hash[0]);
vars[hash[0]] = hash[1];
Run Code Online (Sandbox Code Playgroud)
我重写了代码,如:
var vars={};
...
vars[hash[0]] = hash[1];
Run Code Online (Sandbox Code Playgroud)
它的工作原理.现在的问题是:
ARR.push(KEY)然后使用ARR[KEY]=VAL格式?我有一个Web服务,它返回一个JSON编码的数据数组.然后我使用jQuery的.each()函数来遍历该数组,但是在Firefox中它会向下迭代,而在Chrome中它会迭代.
从Web服务返回的数据是:
{
"data": {
"610": {
"id": "610",
"url": "a url 1",
"description": "XXX YYY",
"toc": "0000-01-00",
"active": "1"
},
"608": {
"id": "608",
"url": "a url 1",
"description": "ytttgffrr",
"toc": "0000-01-00",
"active": "1"
},
"607": {
"id": "607",
"url": "a url 3",
"description": "rtretert3",
"toc": "0000-01-00",
"active": "1"
},
"606": {
"id": "606",
"url": "a url 4",
"description": "xxxwwww",
"toc": "0000-01-00",
"active": "1"
},
...
}
}
Run Code Online (Sandbox Code Playgroud)
Firefox进入610 - > 606,而Chrome则为606 - > 610.
任何想法为什么以及我能做些什么呢?