我在循环中正确使用Object.keys吗?

时间:2015-09-04 19:51:47

标签: javascript

 getCount = function(questions) {
     var i, questionCount, value;
      i = 0;
      console.log(questions);
      while (i < questions.length) {
        questionCount = 0;
        for (value in questions) {
          if (questions.hasOwnProperty(value)) {
            console.log(value);
            if (value > 0) {
              questionCount++;
            }
          }
        }
        i++;
        console.log(questionCount, 'COUNT');
      }
};

var questions = [ 
  {question : 'example question', 
   option : ['option 1' , 'option 2'], 
   value: 1]}, 
  {question : 'example question 2', 
   option : ['option 1' , 'option 2, option 3'], 
   value: 2]}
  ]

基本上,我试图在每次问题中出现大于0的值时进行计数。但是,当我在console.log时,我会继续回到似乎问题的长度。

console.log(value)显示索引值0和1,而不是value属性的实际数字。

2 个答案:

答案 0 :(得分:0)

正确查看代码,最好在处理对象数组时使用标准for循环。

while循环也是不必要的。

请考虑以下代码段。

(function(){
  var questions = [ 
    {
      question : 'example question', 
      option   : [
        'option 1' ,
        'option 2'
      ], 
      value    : 1
    }, 
    {
      question : 'example question 2', 
      option   : [
        'option 1',
        'option 2',
        'option 3'
      ], 
      value: 2
    }
  ],  
    getCount = function(questions) {
     var i = 0,
       questionCount = 0;
     for (var i = 0; i < questions.length; i++) {
       if (questions[i].hasOwnProperty('value')) {
         if (questions[i].value > 0) {
           questionCount++;
         }
       }
      }
      return questionCount; 
     };
  console.info(getCount(questions));

  
}());

希望能帮到你!

答案 1 :(得分:0)

使用Array提供的filter()方法

return questions.filter(function (question) {
        //filter question having positive value defined
        return !! question.value && question.value > 0;
}).length;