2015-12-21 65 views
0

我有一個JavaScript函數中的json數組。該函數接受輸入,在數組中搜索key/val,並給出我需要的值。輸入多個變量到函數,搜索JSON數組,並接收多個數組Val作爲輸出

輸入我試圖做到的是像變量的字符串:

1,2,3,4,5 

進入這個功能:

function getF(fid) { 
var flist = [ 
{ 
"fintid":1, 
"featureint":"See Remarks" 
}, 
{ 
"fintid":2, 
"featureint":"Accessory Apt" 
}, 
{ 
"fintid":3, 
"featureint":"Alarm: Fire" 
}, 
{ 
"fintid":4, 
"featureint":"Alarm: Security" 
}, 
{ 
"fintid":5, 
"featureint":"Bar: Dry" 
} 
] 
for(var i = 0; i < flist.length; i++) 
{ 
    if(flist[i].fintid == fid) { 
     return flist[i].featureint; 
    } 
} 
} 

和接收所有相應的「featureint」的價值觀,那場比賽所有的FID/fintid賦予該函數。如果我只給一個號碼,我可以做到這一點。我想給多個號碼,並接收多個值...請幫忙嗎? :)

回答

1

假設值過去是一個數組(不,分隔的字符串 - 如果是,將它拿到一個數組) - 您可以使用indexOf檢查環繞在對數組對象ID。按所有比賽到一個數組,然後返回:

function getF(fid) { 
    //Split and cast to array of numbers 
    fid = fid.split(",").map(function(i) { return parseInt(i) }); 

    var flist = [ 
     { 
      "fintid":1, 
      "featureint":"See Remarks" 
     }, 
     { 
      "fintid":2, 
      "featureint":"Accessory Apt" 
     } 
     .. 
    ] 

    var matches = [];  

    for(var i = 0; i < flist.length; i++) { 
     if(fid.indexOf(flist[i].fintid) > -1) { 
      matches.push(flist[i].featureint); 
     } 
    } 

    return matches; 
} 

使用範例:

getF("1,2"); 

演示:https://jsfiddle.net/5p4wmjyu/

+0

我試過這個代碼,b輸出結果空白。是的,fid輸入實際上是一串由逗號分隔的數字,我嘗試分割。 – user3259138

+0

@ user3259138 - 這是你想要的嗎? https://jsfiddle.net/5p4wmjyu/ – tymeJV

-2

您可以使用Array.filter()來完成這個

var flist = [ 
 
{ 
 
"fintid":1, 
 
"featureint":"See Remarks" 
 
}, 
 
{ 
 
"fintid":2, 
 
"featureint":"Accessory Apt" 
 
}, 
 
{ 
 
"fintid":3, 
 
"featureint":"Alarm: Fire" 
 
}, 
 
{ 
 
"fintid":4, 
 
"featureint":"Alarm: Security" 
 
}, 
 
{ 
 
"fintid":5, 
 
"featureint":"Bar: Dry" 
 
} 
 
] 
 

 
var searchInt = 3; 
 

 
alert(flist.filter(function(v){ 
 
if(v['fintid']===searchInt){ 
 
return true; 
 
} 
 
return false; 
 
},searchInt)[0]['featureint']); 
 

 
//FOR ARRAY INPUT 
 

 
var input = [1,2,3]; 
 
alert(input.map(function(val){ 
 
return flist.filter(function(v){ 
 
if(v['fintid']===val){ 
 
return true; 
 
} 
 
return false; 
 
},val)[0]['featureint']; 
 
}).toString());

+0

如果我想searchInt = 3,4,5? – user3259138

+0

@ user3259138可以聯合使用數組映射來返回多個值。看到更新的例子。 – kurt

0

您可以將參數切片到數組中,然後像其他人所建議的那樣使用indexOf。注意在這種情況下的結果是一個featureint值的數組,因爲這正是我所瞭解的你所追求的。

function getF(fid) { 
 
var flist = [ 
 
{ 
 
"fintid":1, 
 
"featureint":"See Remarks" 
 
}, 
 
{ 
 
"fintid":2, 
 
"featureint":"Accessory Apt" 
 
}, 
 
{ 
 
"fintid":3, 
 
"featureint":"Alarm: Fire" 
 
}, 
 
{ 
 
"fintid":4, 
 
"featureint":"Alarm: Security" 
 
}, 
 
{ 
 
"fintid":5, 
 
"featureint":"Bar: Dry" 
 
} 
 
]; 
 

 
var args = Array.prototype.slice.call(arguments); 
 

 
return flist.reduce(function(matches, current) { 
 
if(args.indexOf(current.fintid) > -1) { 
 
    \t matches.push(current.featureint); 
 
} 
 
return matches; 
 
}, []); 
 
} 
 

 
var result = getF(1, 3, 4); 
 
console.log(result); 
 

 
var stringArg = "1, 2, 5"; 
 
//apply to pass an array in as args, split to make the array from the string, then map to convert from string to number 
 
result = getF.apply(this, stringArg.split(',').map(function(x){ return Number(x.trim())})); 
 
console.log(result);

+0

這看起來可能會很好地工作。有一刻,我嘗試一下 – user3259138

+0

如果你想要整個對象而不是featureint vals,只需要將matches.push(current.featureint)改爲matches.push(current) – Mic

+0

奇數。它的工作原理與此處應該完全相同。在我的代碼中,getF(1,2,3);是一個變量/數字字符串像fid = 1,2,3 ...但在我的代碼中,它返回空白...? – user3259138

0

作爲一種變型,如果你不知道有多少參數你有,你可以使用申請功能

function getF() { 
 
    var flist = [{ 
 
    "fintid": 1, 
 
    "featureint": "See Remarks" 
 
    }, { 
 
    "fintid": 2, 
 
    "featureint": "Accessory Apt" 
 
    }, { 
 
    "fintid": 3, 
 
    "featureint": "Alarm: Fire" 
 
    }, { 
 
    "fintid": 4, 
 
    "featureint": "Alarm: Security" 
 
    }, { 
 
    "fintid": 5, 
 
    "featureint": "Bar: Dry" 
 
    }]; 
 
    var newArray = []; 
 
    var args = [].slice.call(arguments); 
 

 
    for (var i = 0; i < flist.length; i++) { 
 
    if (args.indexOf(flist[i].fintid) > -1) { 
 
     newArray.push(flist[i].featureint); 
 
    } 
 
    } 
 
    return newArray; 
 
} 
 

 
console.log(getF.apply(null, [2, 5]));