我在javascript函数中有一个json数组。该函数接受输入,在数组中搜索key / 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;
}
}
}
并接收所有相应的&#34; featureint&#34;值,与给予函数的所有fid / fintid匹配。如果我只给一个号码,我可以这样做。我想给多个号码,并收到多个值...请帮忙? :)
答案 0 :(得分: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");
答案 1 :(得分: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) {
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);
答案 2 :(得分: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]));
答案 3 :(得分:-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());