循环遍历对象数组并返回对象键

时间:2016-09-12 07:18:53

标签: javascript reactjs

我的代码如下:

let filters = [ 
    {name: "MAKE", values: 
    [
      {
        Volkswagen: {active: true, make: "Volkswagen"},
        Skoda: {active: true, make: "Skoda"}
      }
    ]
    }
]

function getFilterValues(){
  return filters.filter(f => {
    if(f.name == "MAKE"){
      return f.values.filter(i => {
        Object.keys(i).map(key => {
          return key;
        });
      });
    }
  });
}

var div = document.getElementById('output');
div.innerHTML = getFilterValues();

我想遍历过滤器以获取对象键。

因此,我想要的结果是,在这种情况下 Volkswagen,Skoda 。但我的函数getFilterValues并没有返回我想要的东西。

这是jsfiddle

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您可以使用Object.keys()获取密钥列表。

var filters = [{
  name: "MAKE",
  values: [{
    Volkswagen: {
      active: true,
      make: "Volkswagen"
    },
    Skoda: {
      active: true,
      make: "Skoda"
    }
  }]
}];

for (i = 0; i < filters.length; i++) {
  if (typeof filters[i].values == "object") {
    console.log(Object.keys(filters[i].values[0]));
  }
}

答案 1 :(得分:1)

主要问题在于过滤功能。您希望map,因为使用过滤器,您返回true / false是否应将元素包含在结果代码中。看看这个差异:https://www.diffchecker.com/CX6hOoxo

这有效:https://jsfiddle.net/o93Lm0rc/101/

let filters = [ 
    {name: "MAKE", values: 
    [
        {
            Volkswagen: {active: true, make: "Volkswagen"},
            Skoda: {active: true, make: "Skoda"}
        }
    ]
    }
]

function getFilterValues(){
    return filters.map(f => {
        if(f.name == "MAKE"){
            return f.values.map(i => {
                return Object.keys(i).map(key => {
                    return key;
                });
            });
        }
    });
}


var div = document.getElementById('output');

div.innerHTML = getFilterValues();