2017-07-28 1 views
1

私は次のような式を持っています。angularjsを使用して、数式の変数を配列の値に置き換えますか?

$(5)+ $(6)ここで5 & 6は入力IDです。

各入力IDには配列として100以上の値があります。

var data = [{id : 5, inputs :[{Value:10},{Value:10},{Value:11},...,{Value:12}]},{id : 6, inputs :[{Value:10},{Value:10},{Value:11},...,{Value:12}]}]; 

を次のように 形式は、私が何をしたいかであるデータから対応する値と方程式の変数を置き換えています。続き

は、私は100個のデータ値を持っている場合は、結果の配列は、100の値が含まれている必要があり、私の現在のコード

//tpl is $(5)+$(6); 
$scope.value_replacer = function (tpl, data) { 
    var re = /\$\(([^\)]+)?\)/g, match; 
    var valueArray = []; 
    for (var i = 0; i < data.length; i++) { 
     while (match = re.exec(tpl)) { 
      if (match[1] == data[i].id) { 
       for (var j = 0; j < data[i].inputs.length; j++) { 
        tpl = tpl.replace(match[0], data[i].inputs[j].Value); 
        if (i == data.length - 1) { 
         valueArray.push(tpl); 
        } 
       } 
       re.lastIndex = 0; 
      } 
     } 
    } 
    return valueArray; 
} 

です。しかし、私は同じ価値観を得ています。正しい値を取得するのを手伝ってください。

UPDATE

私の方程式すなわち式を定義し、ユーザが(5)いくつかの時間の$かもしれである - $(6)または$(5)* $(6)そのように..私はちょうど交換したいです5及び6(すなわちIDS)

+1

を達成するために、ループのための2つを使用することができますなぜない、あなただけのLO opを入力フォーマットに適用し、各IDに対応するすべての値を追加しますか? – Vivz

+0

私は論理を得ていませんでした。 –

+0

あなたは方程式から正確に何をしたいですか?各IDに対応するすべての値の合計? – Vivz

答えて

1

あなたはこの

var myApp = angular.module('myApp', []); 
 
myApp.controller('ctrl', ['$scope', function($scope) { 
 
    $scope.data = [{ 
 
     id: 5, 
 
     inputs: [{ 
 
      Value: 10 
 
     }, { 
 
      Value: 10 
 
     }, { 
 
      Value: 11 
 
     }, { 
 
      Value: 12 
 
     }] 
 
    }, { 
 
     id: 6, 
 
     inputs: [{ 
 
      Value: 10 
 
     }, { 
 
      Value: 10 
 
     }, { 
 
      Value: 8 
 
     }, { 
 
      Value: 12 
 
     }] 
 
    }]; 
 
    for (var i = 0; i < $scope.data.length; i++) { 
 
     sum = 0 
 
     for (var j = 0; j < $scope.data[i].inputs.length; j++) { 
 
      sum += $scope.data[i].inputs[j].Value; 
 
     } 
 
     $scope.data[i].sum = sum; 
 
    } 
 
    $scope.findInd=function(id){ 
 
    var index = $scope.data.findIndex(x=>x.id === id); 
 
    return index; 
 
    } 
 
    $scope.multiply=function(){ 
 
    var res = 1; 
 
    for (var i = 0; i < arguments.length; i++) { 
 
     var idSum=$scope.findInd(arguments[i]); 
 
     res *= parseInt($scope.data[idSum].sum); 
 
    } 
 
    return res; 
 
    } 
 
    $scope.divide=function(){ 
 
    var res =$scope.data[$scope.findInd(arguments[0])].sum; 
 
    for (var i = 1; i < arguments.length; i++) { 
 
     var idSum=$scope.findInd(arguments[i]); 
 
     res /= parseInt($scope.data[idSum].sum); 
 
    } 
 
    return res; 
 
    } 
 
    $scope.add=function(){ 
 
    var res = 0; 
 
    for (var i = 0; i < arguments.length; i++) { 
 
     var idSum=$scope.findInd(arguments[i]); 
 
     res += parseInt($scope.data[idSum].sum); 
 
    } 
 
    return res; 
 
    } 
 
    $scope.subtract=function(){ 
 
    var res = 0; 
 
    for (var i = 0; i < arguments.length; i++) { 
 
     var idSum=$scope.findInd(arguments[i]); 
 
     res = parseInt($scope.data[idSum].sum)-res; 
 
    } 
 
    return res; 
 
    } 
 
    console.log($scope.add(5,6)); 
 
    console.log($scope.subtract(5,6)); 
 
    console.log($scope.multiply(5,6)); 
 
    console.log($scope.divide(5,6)); 
 
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="myApp" ng-controller="ctrl"> 
 
    
 
</div>

+0

あなたの答えは$(5)+ $(6)に基づいています。これは大丈夫です。しかし、私の方程式はユーザー定義です。つまり、方程式の形式はユーザーによって異なる場合があります。だから私が望むのは、Id値を配列の各値に置き換えることだけです。例えば、私が方程式$(5)/ $(6)または$(5)* $(6)を持っているなら、5と6を配列の値で置き換えます。つまり、10 + 10または10 * 10のようになります。 –

+0

@SHADOWSすべての操作で自分の答えを更新しました。要件に応じて上記の機能を変更することができます。あなたが行うべき唯一のことは、方程式からIDをフェッチすることです。 :) – Vivz

+0

貴重な努力をいただきありがとうございます。 –

関連する問題