包含逗号分隔坐标数组的Javascript对象
包含逗号分隔数字数组的对象的正确格式是什么? 以下是我正在做的,但我不确定这是否是正确的方法:包含逗号分隔坐标数组的Javascript对象,javascript,arrays,object,Javascript,Arrays,Object,包含逗号分隔数字数组的对象的正确格式是什么? 以下是我正在做的,但我不确定这是否是正确的方法: var myObj = { 'coord1' : { 'section-a' : [216,259,216,294,165,294,165,259,216,259] }, 'coord2' : { 'section-a' : [20,218,8,178,3,143,6,112,13] } }; 我希望通过以下方式访问截面的坐标: for(var coord in myObj){
var myObj = {
'coord1' : { 'section-a' : [216,259,216,294,165,294,165,259,216,259] },
'coord2' : { 'section-a' : [20,218,8,178,3,143,6,112,13] }
};
我希望通过以下方式访问截面的坐标:
for(var coord in myObj){
for(var section in coord){
alert(section);
}
}
并将原始坐标作为逗号分隔的字符串返回。有什么建议吗?不幸的是,你没有做到你所期望的
在对象上迭代时,创建的变量是当前迭代的属性名。它是迭代数组时数组的索引
for(var prop in myObj){
for(var i in myObj[prop]){
alert(myObj[prop][i]);
}
}
注意,在对象上进行迭代时,您可能只希望迭代该对象的直接属性,而不希望迭代protype链上的属性。如果只想迭代对象上的直接属性,请使用
for(var prop in myObj){
if(myObj.hasOwnProperty(prop)) {
for(var i in myObj[prop]){
if(myObj[prop].hasOwnProeprty(i)) {
alert(myObj[prop][i]);
}
}
}
}
请记住,javascript中的
for in
循环返回的是一个objects属性键,而不是键所指的对象。也可用于避免可能在对象原型上循环
您需要将其更改为:
for (var coord in myObj){
if(myObj.hasOwnProperty[coord]){
var coord = myObj[coord];
for(var section in coord)
if(coord.hasOwnProperty[section]){
alert(coord[section]);
}
}
}
}
没有“正确的道路”。这取决于情况和什么是合理的。但是,如果不包括使用
hasOwnProperty
@MattBurland,则不应在中为..使用forprocessing@Ian:这不是不必要的处理,这是公认的最佳实践。尝试阅读“Javascript,好的部分”。强烈推荐。@MattBurland也推荐它,我在MDN上看不到任何地方说“你应该总是使用hasOwnProperty
。没有它的例子表明它工作得很好。你应该只在必要时使用hasOwnProperty
。哦,所以我们都必须遵循“JavaScript,好的部分”?我不明白什么是“最佳实践”“在这里……”伊恩:<代码>如果您只想考虑对象本身的属性,而不是它的原型,则使用GeOutsPrimeType名称或执行HasObjyTabor检查< /C>。不是也许你应该考虑一下
,使用
。非常感谢!我习惯于php,我想我是用foreach术语思考的。For in循环应该始终在javascript中包含一个.hasOwnProperty检查,这是一个很好的实践。@Ian这没关系,因为你不会这么做?我看不出这种逻辑是如何适用于我们其他人的。@Ian我指的是你的陈述:“没关系,因为我从来没有,也永远不会,做一些导致需要拥有自己财产的事情。”我已经阅读了评论,谢谢。该线程还提到使用其他人的代码,其中对象已被直接修改,并且您给出了完全不合逻辑的响应,但嘿,继续光顾。