【问题标题】:comparing variable to json object将变量与 json 对象进行比较
【发布时间】:2015-11-12 14:33:33
【问题描述】:

我正在尝试将用户选择(性别和国家/地区)与 json 对象(性别和国家/地区)的选择进行比较。如果比较为真,则 console.log json 的性别和国家的“值”。

JS:

var app = angular.module('deathApp', []);
app.controller('data', function ($scope, $http) {
    $http.get("angular/death/data.json")
        .success(function (response) {

        $scope.ages = response.fact;
        //OBTAIN THEIR DEATH AGE
        //save their gender and country
        var gender = $('select[name=gender]').val();
        var country = $('select[name=country]').val();
        console.log("GENDER:" + gender + "." + "COUNTRY:" + country);
        //get their death age

        if (gender && country === gender and country from $scope.ages) {
            console.log(this.$scope.ages['Value'])
        }

json:

{
    "fact": [
        {
            "COUNTRY": "Afghanistan",
            "SEX": "Female",
            "Value": "62"
        },
        {
            "COUNTRY": "Afghanistan",
            "SEX": "Male",
            "Value": "61"
        },
        {
            "COUNTRY": "Albania",
            "SEX": "Female",
            "Value": "76"
        },
        {
            "COUNTRY": "Albania",
            "SEX": "Male",
            "Value": "73"
        },
        {
            "COUNTRY": "Algeria",
            "SEX": "Female",
            "Value": "74"
        },
        {
            "COUNTRY": "Algeria",
            "SEX": "Male",
            "Value": "70"
        }
    ]
}

不要太担心 json 数据的接线,它工作正常。我可以很好地获得 $scope.ages 数据。

【问题讨论】:

  • 你不能使用«and»。请改用«&&»。
  • “连接 json 数据”是指如何获取 gender 和 country 值?如果没有,我想你应该知道,当 Angular 有更简单的方法来跟踪它们时,使用 jQuery 让它们有点奇怪。你有没有为他们使用 ngModel 的原因?
  • if 语句中的来自是什么?
  • @HarrisWeinstein 我尝试为此使用 ngModel,但被卡住并选择了 jquery。请随时向我展示如何使用 Angular 进行操作。我正在使用 Angular 在前端显示下拉选项的值。我正在使用 jquery 来获取用户输入并将它们存储在一个变量中。
  • @artworkjpm 嘿,我更新了我的答案,使用你的名字作为对象,我还添加了一个 plunker,它还演示了如何使用 ngModel 自动跟踪选定的选项。

标签: javascript json angularjs


【解决方案1】:

您必须映射到数据并遍历数组中的对象。 :

for(var i = 0; i < $scope.ages.length; i++){

 if (gender  === $scope.ages[i].SEX && country === $scope.ages[i].COUNTRY)
   {
      console.log($scope.ages[i].Value)
   }

}

【讨论】:

  • 非常接近,但对我帮助很大。我需要将 response.fact 更改为 $scope.ages。
【解决方案2】:

只需使用for 循环,并在找到所需内容时中断。

for(var i=0; i<$scope.ages['fact'].length; i++)
    if(gender === $scope.ages['fact'][i]['SEX'] && country === $scope.ages['fact'][i]['COUNTRY']){
        console.log($scope.ages['fact'][i]['Value']);
        break;
}

此外,该数组看起来是按国家/地区的字母顺序排序的。您可以对此进行二分搜索以快速到达您想要的国家/地区,然后在两种性别之间做出选择。

这是一个简单的 plunker,它具有此功能,并使用 ngModel 跟踪所选的性别和国家:demo。

【讨论】:

  • 你让我对“yourJSO”的使用感到困惑。没有变量名保存 json 数据,它是使用 angular 调用的,可以在顶部看到。我想我可以使用 var yourJSO = $scope.ages ?
【解决方案3】:

如果您需要从给定的值中找到一个值,在 json 数据中,您可以使用 filter 函数,该函数适用于数组。

此代码将返回一个包含给定值的对象的数组。

$scope.age = $scope.ages.fact.filter(function(x) {
    return x.COUNTRY === country && x.SEX === gender;
})[0].Value; // From the current object only show the «Value» key. So finally, $scope.age will contain the age. Use [0] because, you will get an array with one object which match with the criteria search.

类似这样的:

(function() {
  var app = angular.module("deathApp", []);

  app.controller("data", ["$scope",
    function($scope) {
      $scope.ages = {
        "fact": [{
          "COUNTRY": "Afghanistan",
          "SEX": "Female",
          "Value": "62"
        }, {
          "COUNTRY": "Afghanistan",
          "SEX": "Male",
          "Value": "61"
        }, {
          "COUNTRY": "Albania",
          "SEX": "Female",
          "Value": "76"
        }, {
          "COUNTRY": "Albania",
          "SEX": "Male",
          "Value": "73"
        }, {
          "COUNTRY": "Algeria",
          "SEX": "Female",
          "Value": "74"
        }, {
          "COUNTRY": "Algeria",
          "SEX": "Male",
          "Value": "70"
        }]
      };

      $scope.compare = function() {
        var gender = $('select[name=gender]').val();
        var country = $('select[name=country]').val();

        $scope.age = $scope.ages.fact.filter(function(x) {
          return x.COUNTRY === country && x.SEX === gender;
        })[0].Value;
      };
    }
  ]);
})();
<html data-ng-app="deathApp">

<head>
  <meta charset="utf-8" />
  <title></title>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

</head>

<body data-ng-controller="data">
  <select name="gender">
    <option value="Male">Male</option>
    <option value="Female">Female</option>
  </select>
  <select name="country">
    <option value="Albania">Albania</option>
    <option value="Afghanistan">Afghanistan</option>
  </select>
  <button data-ng-click="compare()">Compare</button>
  <br />Age: {{age}}
</body>

</html>

【讨论】:

    猜你喜欢
    • 2015-06-26
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 2021-06-21
    • 1970-01-01
    相关资源
    最近更新 更多