return true实际上返回undefined

时间:2018-02-21 00:42:39

标签: javascript

继承我的代码。 我真的不知道自己做错了什么。

var arr = [{
   order_count: 1,
   order_date: "2015-10-10"

}, {
    order_count: 2,
    order_date: "2017-03-01"
}, {
    order_count: 3,
    order_date: '2017-04-10'
}];

function checkDay (date, maxDays){
   var flag = false;
   arr.forEach(function(element) {
     if (element.order_date === date && element.order_count >= maxDays)
     {
      flag = true;
      return true;
     }
   });
   if (!flag) {
    return false;
   }
}

console.log(checkDay('2017-04-10', 3));

3 个答案:

答案 0 :(得分:3)

return true中的arr.forEach只会突破forEach内的当前迭代(其他迭代将继续执行),而不是主函数。

更改

if (!flag) {
 return false;
}

return flag;

答案 1 :(得分:3)

使用array.some方法

function checkDay(date, maxDays) {
    return arr.some(element => element.order_date === date && element.order_count >= maxDays);
}

这只会循环,直到所有元素都被处理和评估false,或者在返回true后完成循环 - 所以,行为完全符合您的预期

答案 2 :(得分:0)

您没有返回值

function checkDay (date, maxDays) {
   var flag = false;

   arr.forEach(function(element) {
     if (element.order_date === date && element.order_count >= maxDays) {
      flag = true;
     }
   });

   return flag;
}

使用函数some

的更好方法
function checkDay (date, maxDays) {
  return arr.some((element) => element.order_date === date && element.order_count >= maxDays);       
}

资源

  • Array.prototype.some()
      

    some()方法测试数组中是否至少有一个元素通过了由提供的函数实现的测试。