2017-11-30 11 views
0

私はif文の条件として値を渡したいが、扱う文字列はスクリプトで作業しています。私はなぜこの値が文字列として認識されるのか分からない。アレイから情報を直接抽出する必要がありますか?if文の条件として変数値を渡します。

//extracting date and preparing condition 
function dateArgument() { 
var start = $("#start").val(); 
var end = $("#end").val(); 
var y; 

if(start && end){ 
    y = ' && arr[i].created.substring(0,10) >= '+start+' && arr[i].created.substring(0,10) <= '+end; 
} else { 
    y = ''; 
} 
return y; 
}; 

// Using Condition 
function count (arr, nameVar, valueVar){ 
var x = 0; 
// Preparing condition 
var contd = '$.trim(arr[i][nameVar]) == valueVar'+dateArgument(); 
console.log(contd); 
var start = $("#start").val(); 
var end = $("#end").val(); 

for (i=0; i < arr.length; i++){ 
    // using prepared condition 
      if (contd) { 
     x++; 
    } 
} 
return x; 
}; 

// using prepared condition 
function mapData(){ 
    $.ajax({ 
url:'http://192.168.2.20:8020'+partUrl('province')+partUrl('activity')+partUrl('priority')+partUrl('status'), 
type: 'GET', 
dataType: 'json', 
success: function (data){ 
    //Using code here 
    console.log(count(data,'priority','HighclearLayers(); 
    createPins(data); 
    //summaryValues(data); 
    } 
}) 
}; 
+0

ように変更

if (contd(i)) 

として使用します。 –

答えて

2

それは確かにあります文字列、後で呼び出すfunctionにする

var contd = (i) => $.trim(arr[i][nameVar]) == valueVar && dateArgument(i); 

とまた、あなたが条件を準備する必要がある場合は、その後、ループ内で呼び出される関数としての準備をしdateArgument

function dateArgument() 
{ 
    var start = $("#start").val(); 
    var end = $("#end").val(); 
    var y =() => true; 

    if(start && end){ 
     y = (i) => arr[i].created.substring(0,10) >= start && arr[i].created.substring(0,10) <= end; 
    } 
    return y;  
}; 
+0

dateArgumentの戻り値が別の文字列条件であるため、これは機能しません。 – Zammy

+0

@ Zammyもそれを修正しました。 – gurvinder372

+0

をチェックしてください。ちょうどvalueVarのクォーテーションマークを取り除くだけです。私はあなたの前に私の答えに同じを追加しました、私はその大丈夫@ gurvinder372 – Zammy

1

これで十分です。文字列を条件として使用することはできません。 本当に必要な場合は、eval()を使用してください。しかし、覚えて、評価は悪です!

if (eval(contd)) { 
    x++; 
} 

よりよい解決策:使用本当の条件の代わりに、文字列の条件は、この値を文字列として認識されている理由は、私が得ていないのです

if(start && end){ 
    //solve the first part of your condition here 
    //this will return a boolean 
    y = arr[i].created.substring(0,10) >= start && arr[i].created.substring(0,10) <= end; 
} else { 
    y = true; 
} 

//later prepare the condition it like this 
//this will also return a boolean 
var contd = $.trim(arr[i][nameVar]) == valueVar && dateArgument(); 
関連する問題