将Multiple Var输入函数,搜索JSON数组,并将Multiple Array Val作为输出接收

Input Multiple Var to Function, Search JSON Array, and Receive Multiple Array Val as Output

本文关键字:Multiple Val 输出 Array 数组 输入 Var 函数 搜索 JSON 并将      更新时间:2023-09-26

我在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;
    }
}
}

并接收所有相应的"featureint"值,这些值与给定给函数的所有fid/fintid相匹配。如果我只给一个号码,我就能做到。我想给出多个数字,并接收多个值。。。请帮忙?:)

假设过去的值是一个数组(而不是由,分隔的字符串-如果是,则将其拆分以获得一个数组),则可以使用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/

作为一种变体,如果您不知道自己有多少参数,可以使用apply函数

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]));

您可以将参数分割成一个数组,然后按照其他人的建议使用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);

您可以使用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());