2016-12-07 54 views
0

JS代碼:如何分割AngularJS中的數據?

$scope.records={"0.19", "C:0.13", "C:0.196|D:0.23"} 
    .filter('filterOutput', function() { 
     return function (input) { 
      if (input.indexOf(":") != -1) { 
       var out = input 
        .split('|') 
        .map(function (v) { 
         var s = v.split(':') 
         return s[0] + ':' + (Number(s[1]) * 100) + "%" 
        }) 
        .join() 
       return out; 
      } else { 
       return input * 100 + "%"; 
      } 
     } 
    }) 

HTML代碼:

<h1 ng-repeat="x in records|filterOutput">{{x}}</h1> 

我想輸出:

"19%" "C:13%" "C:19.6%|D:23%"

console.log

TypeError: input.indexOf is not a function

應該是什麼我做? 如何在AngularJS中分割數據?

+0

我不知道如何你的聲明$ scope.records = { 「0.19」,「C: 0.13「,」C:0.196 | D:0.23「}執行?而且indexOf適用於數組和字符串。在html上查看$ scope.records = {「0.19」,「C:0.13」,「C:0.196 | D:0.23」}或{{records}}之下的console.log,看它是否有任何記錄 –

+0

The問題是你有一個對象而不是一個數組** indexOf **適用於數組和字符串。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf – Azarus

+0

$ scope.records本身不是有效的json,它不能與ng-repeat一起使用。 ng-repeat需要一個數組來重複一個對象。 – superUser

回答

2

我已經修改您的代碼以獲得所需的輸出。

HTML代碼

<h1 ng-repeat="x in records track by $index">{{x|filterOutput}}</h1> 

變量值

$scope.records=["0.19","C:0.13","C:0.196|D:0.23"]; 

AngularJS過濾

.filter('filterOutput', function() { 
    return function (input) { 
     if (input.indexOf(":") != -1) { 
      var out = input 
       .split('|') 
       .map(function (v) { 
        var s = v.split(':') 
        return s[0] + ':' + (Number(s[1]) * 100) + "%" 
       }) 
       .join('|') 
      return out; 
     } else { 
      return input * 100 + "%"; 
     } 
    } 
}) 
+0

謝謝。我可以在你的js'var _input = input +「」'中做這個,它也可以解決mypromble.Can我可以問你另一個問題〜我有一個數據'C:0.28',輸出是'28.000000000000000004%''我想我沒有沒有處理一些細節。 –

+0

如果要限制小數點,則可以使用.toFixed(decimal_point值)保存數字值。 您可以在過濾器中使用下面提到的代碼來返回 'return s [0] +':'+(Number(s [1])* 100).toFixed(2)+「%」' –

0

我修改了您的代碼以獲得所述的預期結果,請檢查下面的代碼。 我創建了一個搗鼓更好地理解here

控制器:

.controller('FilterController', function ($scope) { 
    $scope.records = ["0.19","C:0.13","C:0.196|D:0.23"]; 
}); 

篩選:

.filter('filterOutput', function() { 
     return function (inputArray) { 
     return inputArray.map(function (input){ 
       if (input.indexOf(":") != -1) { 
       var out = input 
        .split('|') 
        .map(function (v) { 
         var s = v.split(':') 
         return s[0] + ':' + (Number(s[1]) * 100) + "%" 
        }) 
        .join('|') 
       return out; 
      } else { 
       return input * 100 + "%"; 
      } 
     }); 
     } 
    });