输入多个Var到函数,搜索JSON数组,并接收多个数组Val作为输出

时间:2015-12-21 20:49:27

标签: javascript jquery arrays json for-loop

我在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匹配。如果我只给一个号码,我可以这样做。我想给多个号码,并收到多个值...请帮忙? :)

4 个答案:

答案 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");

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

答案 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());