Javascript 循环遍历对象并返回所有属性数组的值
我有一个javascript对象,它有一系列属性。在本例中,每个属性表示一件衣服,带有一个键,然后是一个数组值Javascript 循环遍历对象并返回所有属性数组的值,javascript,Javascript,我有一个javascript对象,它有一系列属性。在本例中,每个属性表示一件衣服,带有一个键,然后是一个数组值 var clothes = { CLO1: ["shirt", "cotton", "white"], CLO2: ["tie", "silk", "red"], CLO3: ["shoes", "leather", "black"] }; 我想循环浏览每一件衣服并打印出每件衣服的颜色。我想找出最简洁的方法。像这样的-- 任何想法都将不胜感激。我希望这是有道理的。谢谢 v
var clothes = {
CLO1: ["shirt", "cotton", "white"],
CLO2: ["tie", "silk", "red"],
CLO3: ["shoes", "leather", "black"]
};
我想循环浏览每一件衣服并打印出每件衣服的颜色。我想找出最简洁的方法。像这样的--
任何想法都将不胜感激。我希望这是有道理的。谢谢
var clothes = {
CLO1: ["shirt", "cotton", "white"],
CLO2: ["tie", "silk", "red"],
CLO3: ["shoes", "leather", "black"]
};
var print = function(obj) {
for (var property in obj) {
if (obj.hasOwnProperty(property)) {
console.log(obj[property][2]);
}
}
}
print(clothes);
在for循环的每次迭代中,property变量保存属性的名称,然后必须索引到obj以检索属性的值,然后再次索引数组的第二个元素以获得所需的颜色
虽然我建议创建一个结构(如@ahoffer所建议的)来保存这些项目,但这是可行的
在for循环的每次迭代中,property变量保存属性的名称,然后必须索引到obj以检索属性的值,然后再次索引数组的第二个元素以获得所需的颜色
虽然我建议创建一个结构(如@ahoffer所建议的)来保存这些项目,但这是可行的。看起来不错。数组有时是空的还是空的?评论中关于删除额外返回语句的建议是一个很好的建议 我注意到每个数组都有相似的结构。第一个要素是服装类型,第二个要素是面料,第三个要素是颜色。可以使用对象而不是数组。使用对象的优点是它可以告诉您(和其他程序员)更多关于数据结构的信息。使用数组存储以下对象的集合:
var clothes = [
{ type: "shirt",
material: "cotton",
color: "white"
},
{ type: "belt",
material: "leather",
color: "none"
];
另外,不要检查属性“color”是否存在,而是始终包含“color”。如果不相关,则将“颜色”设置为“无”
打印出的颜色如下所示:
clothes.forEach(function(each) {
console.log(each.color);
});
更新
我选择始终包含“颜色”,因为它简化了过程代码。如果没有数据冗余,我必须在迭代属性时检查特定键是否存在。我通常选择简化代码,而不是数据。从理论上讲,它类似于密集数据表示和稀疏数据表示之间的权衡
还有一个语义原因总是包括颜色。如果一些衣服有“尺寸”属性,而其他衣服没有呢。如果我看到的所有示例都没有“大小”怎么办?我不知道在我的程序代码中包含“大小”。看起来不错。数组有时是空的还是空的?评论中关于删除额外返回语句的建议是一个很好的建议 我注意到每个数组都有相似的结构。第一个要素是服装类型,第二个要素是面料,第三个要素是颜色。可以使用对象而不是数组。使用对象的优点是它可以告诉您(和其他程序员)更多关于数据结构的信息。使用数组存储以下对象的集合:
var clothes = [
{ type: "shirt",
material: "cotton",
color: "white"
},
{ type: "belt",
material: "leather",
color: "none"
];
另外,不要检查属性“color”是否存在,而是始终包含“color”。如果不相关,则将“颜色”设置为“无”
打印出的颜色如下所示:
clothes.forEach(function(each) {
console.log(each.color);
});
更新
我选择始终包含“颜色”,因为它简化了过程代码。如果没有数据冗余,我必须在迭代属性时检查特定键是否存在。我通常选择简化代码,而不是数据。从理论上讲,它类似于密集数据表示和稀疏数据表示之间的权衡
还有一个语义原因总是包括颜色。如果一些衣服有“尺寸”属性,而其他衣服没有呢。如果我看到的所有示例都没有“大小”怎么办?我不知道在我的程序代码中包含“大小”。可能是这样的吗
Object.keys(clothes).forEach(function(type) {
console.log(type + ": " + clothes[type].join(', '));
});
上述代码将为您提供以下信息:
CLO1: shirt, cotton, white
CLO2: tie, silk, red
CLO3: shoes, leather, black
也许是那样的
Object.keys(clothes).forEach(function(type) {
console.log(type + ": " + clothes[type].join(', '));
});
上述代码将为您提供以下信息:
CLO1: shirt, cotton, white
CLO2: tie, silk, red
CLO3: shoes, leather, black
你可以回来一次。因此,您可能希望将所需数据存储在对象中,并在末尾返回该对象。@Oriol您只能返回一次,但可以有多个返回语句。问题是,一旦其中一个被击中,其他人都不会被击中。你可以返回一次。因此,您可能希望将所需数据存储在对象中,并在末尾返回该对象。@Oriol您只能返回一次,但可以有多个返回语句。问题是,一旦其中一个被击中,其他的都不会被击中。如果浏览器没有控制台,那么使用
if(window.console){console.log(“…”)}
怎么样?@IstiaqueAhmed这只是示例的一个模糊处理。@AreWojciechowski,“just and obfusion”-什么意思?为什么要模糊处理?IE将在控制台中抛出错误
代码,这是消除混淆的一大幸事@IstiaQuahmed Real生产代码不应使用console.log
显示结果。在示例代码中或开发时,开发人员可以放心地使用包含控制台的浏览器。在示例中添加不必要的条件语句会使代码不那么清晰,更难阅读,从而更难理解。这是不必要的混乱。如果浏览器没有控制台,使用if(window.console){console.log(“…”)}
怎么样?@IstiaqueAhmed这只是示例的一个模糊处理。@AreWojciechowski,“just and obfusion”-什么意思?为什么要模糊处理?IE将在控制台中抛出错误
代码,这是消除混淆的一大幸事@IstiaQuahmed Real生产代码不应使用console.log
显示结果。在示例代码中或开发时,开发人员可以放心地使用包含控制台的浏览器。在示例中添加不必要的条件语句会使代码不那么清晰,更难阅读,从而更难理解。这是不必要的