【问题标题】:How to convert key-value pairs to list of array using `AngularJS`?如何使用`AngularJS`将键值对转换为数组列表?
【发布时间】:2017-01-29 10:30:19
【问题描述】:

这是我们的数据:

$scope.arr = {
     "1": "A",
     "2": "B",
     "3": "C",
     "4": "D",
     "5": "E",
     "6": "F",
     "7": "Others",
     "fromDate": {
      "$date": "2015-02-13T20:59:28.947Z"
     }
}

如何将此数据转换为列表/数组格式?

我期待这样的事情:(顺便说一句,我也想删除fromDate

$scope.formattedArr = [
    {value: "1",name: "A" },
    {value: "2",name: "B" },
    {value: "3",name: "C" },
    {value: "4",name: "D" },
    {value: "5",name: "E" },
    {value: "6",name: "F" },
    {value: "7",name: "Others" }
]

【问题讨论】:

    标签: angularjs arrays json


    【解决方案1】:

    angular.module('app',[])
    .controller('ctrl',function($scope){
    $scope.arr = {
         "1": "A",
         "2": "B",
         "3": "C",
         "4": "D",
         "5": "E",
         "6": "F",
         "7": "Others",
         "fromDate": {
          "$date": "2015-02-13T20:59:28.947Z"
         }
    }
     $scope.aarr = [];
      for (key in $scope.arr){
         $scope.aarr.push({'value' : key , 'name' : $scope.arr[key] })
      }
      
      
      console.log($scope.aarr)
    })
    
     
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.14/angular.min.js"></script>
    
    <div ng-app="app" ng-controller="ctrl">{{aarr}}</div>
      

    【讨论】:

      【解决方案2】:

      嗯,这是 Angular 所以... angular.forEach()。

      $scope.arr = {
           "1": "A",
           "2": "B",
           "3": "C",
           "4": "D",
           "5": "E",
           "6": "F",
           "7": "Others",
           "fromDate": {
            "$date": "2015-02-13T20:59:28.947Z"
           }
      }
      $scope.formattedArr = [];
      angular.forEach($scope.arr, function(value, key) {
          if ( key !== 'fromDate' ) {   
              this.push({value: key, name: value});
          }
      }, $scope.formattedArr);
      
      expect($scope.formattedArr).toEqual([
          {value: "1",name: "A" },
          {value: "2",name: "B" },
          {value: "3",name: "C" },
          {value: "4",name: "D" },
          {value: "5",name: "E" },
          {value: "6",name: "F" },
          {value: "7",name: "Others" }
      ]);
      

      让我试着把它放在一个代码 sn-p 中:

      (function(angular) {
        'use strict';
      angular.module('myapp', []).controller('MainCtrl', function MainCtrl() {
          this.arr = {
               "1": "A",
               "2": "B",
               "3": "C",
               "4": "D",
               "5": "E",
               "6": "F",
               "7": "Others",
               "fromDate": {
                "$date": "2015-02-13T20:59:28.947Z"
               }
          };
          this.formattedArr = [];
          angular.forEach(this.arr, function(value, key) {
            if( key !== 'fromDate') {
              this.push({value: key, name: value});
            }
          }, this.formattedArr);
        
      });
      })(window.angular);
      
          
      <!doctype html>
      <html lang="en">
      <head>
        <meta charset="UTF-8">
        <title>Example - example-heroComponentSimple-production</title>
        
      
        <script src="//code.angularjs.org/snapshot/angular.min.js"></script>
      
        
      </head>
      <body ng-app="myapp">
      
      <div ng-controller="MainCtrl as vm">
        <b>Very basic AngularJs component example</b><br><br>
        <div><b>Before</b></div>
        <pre>arr = {{vm.arr | json}}</pre>
        <div><b>After</b></div>
        <pre>formattedArr = {{vm.formattedArr | json}}</pre>
      </div>
      </body>
      </html>

      【讨论】:

        【解决方案3】:

        可以使用map()函数,看下面sn-p

        var $scope = {};
        $scope.arr = {
          "1": "A",
          "2": "B",
          "3": "C",
          "4": "D",
          "5": "E",
          "6": "F",
          "7": "Others",
          "fromDate": {
            "$date": "2015-02-13T20:59:28.947Z"
          }
        }
        
        $scope.list = Object.keys($scope.arr).map(function(el, index) {
          if (el != "fromDate")
            return { value: index + 1, name : $scope.arr[el] };
        });
        
        console.log($scope.list);

        【讨论】:

          【解决方案4】:

          您可以使用for in 循环来访问对象的键和值

          for (var key in $scope.arr) {
              if ($scope.arr.hasOwnProperty(key) && typeof $scope.arr[key] === 'string') {
                  $scope.formattedArr.push({
                   value: key,
                   name: $scope.arr[key]
                  });
              }
          };
          

          【讨论】:

            猜你喜欢
            • 2019-09-22
            • 2020-10-12
            • 2022-10-15
            • 1970-01-01
            • 2019-01-14
            • 2019-12-02
            • 2021-10-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多