如何从阵列中获得独特的结果

时间:2015-02-03 12:14:57

标签: javascript arrays json

我有这个for循环。它的控制台记录了我的json文件中颜色字段的颜色。但是有重复的颜色。

这是我的json代码

var movies = [
  {
    "name": "Feugo",
    "outline": "Description about Hydrangea flowers.",
    "months": [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "Nov",
      "Dec"
    ],
    "color": [
      "Orange",
      "Yellow"
    ],
    "type": [
      "Alstroemeria"
    ],
    "image": "alstroemeria-fuego_w300_h400.jpg",
    "id": 1
  },
  {
    "name": "Atlanta",
    "outline": "Description about Hydrangea flowers.",
    "months": [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "Nov",
      "Dec"
    ],
    "color": [
      "Purple",
      "Yellow",
      "White"
    ],
    "type": [
      "Alstroemeria"
    ],
    "image": "alstroemeria-atlanta_w300_h400.jpg",
    "id": 2
  },

这是我的for循环:

for (var i = 0; i < movies.length; i++) {
    var obj = movies[i];
    for (var j = 0; j < obj.color.length; j++) {
         console.log(obj.color[j]);
     }
 }

我如何只显示其中一个?

谢谢!

2 个答案:

答案 0 :(得分:1)

获取唯一值的许多解决方案都涉及设置对象属性,并在完成时读取这些属性。

重用示例循环的快速而又脏的示例:

var colsObj = {};
for (var i = 0; i < movies.length; i++) {
    var obj = movies[i];
    for (var j = 0; j < obj.color.length; j++) {      
         colsObj[obj.color[j]] = 1;
     }
 }
var collarr = Object.keys(colsObj);
console.log(collarr); 

Example

设置为1只是一个占位符,只要创建了属性,就可以将其设置为undefined或任何其他值。 属性在虚拟对象colsObj上设置。 Object.keys返回对象的直接可枚举属性的数组。

答案 1 :(得分:0)

您可以将每个项目插入到Set对象中,以确保每个项目都是唯一的,然后遍历该集合:

var colourSet = new Set();
for (var j = 0; j < obj.color.length; j++) {
  colourSet.add(obj.color[j]);
}
for (let colour of colourSet) console.log(colour);

有关Set对象的更多信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set