Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环遍历对象并返回所有属性数组的值_Javascript - Fatal编程技术网

Javascript 循环遍历对象并返回所有属性数组的值

Javascript 循环遍历对象并返回所有属性数组的值,javascript,Javascript,我有一个javascript对象,它有一系列属性。在本例中,每个属性表示一件衣服,带有一个键,然后是一个数组值 var clothes = { CLO1: ["shirt", "cotton", "white"], CLO2: ["tie", "silk", "red"], CLO3: ["shoes", "leather", "black"] }; 我想循环浏览每一件衣服并打印出每件衣服的颜色。我想找出最简洁的方法。像这样的-- 任何想法都将不胜感激。我希望这是有道理的。谢谢 v

我有一个javascript对象,它有一系列属性。在本例中,每个属性表示一件衣服,带有一个键,然后是一个数组值

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
显示结果。在示例代码中或开发时,开发人员可以放心地使用包含
控制台的浏览器。在示例中添加不必要的条件语句会使代码不那么清晰,更难阅读,从而更难理解。这是不必要的