如何在js中返回正确的值?

时间:2014-05-08 04:28:18

标签: javascript json angularjs

我正在尝试一个角度程序,但无法返回正确的值:

function facilityChecked(facility, search) {
    var result;

    search.filter(
        function (v) {
            var rtn = (v["facility_Item"]["text"] == facility);
            if (rtn) {
                var checked = (v.inherit_To_Service === 'true');
                result = checked;
            }
            else {
                result = false;
            }
        }
    );
    return result;
}

在下面的代码中,$ scope.parking应为true,$ scope.toilet应该为false但是它们都返回false?

parking = facilityChecked('Parking', rtn.Organisation.Facility);
$scope.parking = parking;

toilet = facilityChecked('Toilet', rtn.Organisation.Facility);
$scope.toilet = toilet;

另见plunkr link

2 个答案:

答案 0 :(得分:1)

此函数使用filter循环遍历数组中的每个项目,因此始终将结果设置为数组中最后一项的值...

启动初始化result,如果找到该值,则将其解析出项目

function facilityChecked(facility, search) {
    var result = false;

    search.filter(
        function (v) {
            var rtn = (v["facility_Item"]["text"] == facility);
            if (rtn) {
                var checked = (v.inherit_To_Service === 'true');
                result = checked;
            }
        }
    );
    return result;
}

答案 1 :(得分:0)

这里的问题在于search.filter()中的else部分;实际上,search.filter()函数正在为所有Json对象执行。因此,它存储并返回最后一个对象值,即false"。 我认为,其他部分是没有必要的,因为你从data.json中获取值。

function facilityChecked(facility, search) {
    var result;

    search.filter(
      function(v) {
        var rtn = (v["facility_Item"]["text"] == facility);
        if (rtn) {
          var checked = (v.inherit_To_Service === 'true');
          result = checked;        
        }
      }
    );
    return result;
  } 

更新了Plunker:http://plnkr.co/edit/SETl5Zqapsdp8FmB6t56?p=preview