2016-12-07 7 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は配列と文字列に対して機能します。 $ scope.records = {"0.19"、 "C:0.13"、 "C:0.196 | D:0.23"}またはhtmlの{{records}}の下にconsole.logを記録してレコードに何かがあるかどうか確認してください –

+0

問題はあなたが配列ではなくオブジェクトを持っていることです** 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を解くこともできます。別の質問をすることができますか?' C:0.28'の出力は '28.000000000000000004%'です。細部のいくつかを扱わない。 –

+0

小数点を制限する場合は、数値値を保持する変数に.toFixed(decimal_point value)を使用できます。 戻り値のフィルタには以下のコードを使用できます return [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 + "%"; 
      } 
     }); 
     } 
    }); 
関連する問題