簡體   English   中英

如何使用`AngularJS`將鍵值對轉換為數組列表?

[英]How to convert key-value pairs to list of array using `AngularJS`?

這是我們的數據:

$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" }
]

 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> 

welp,這是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" }
]);

Lemme嘗試將其放在代碼段中:

 (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> 

您可以使用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]
        });
    }
};

您可以使用map()函數,請參見以下代碼段

 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); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM