多维数组javascript中的搜索函数存在问题
我有一个包含城市名称和邮政编码的数组,我需要在其中搜索,我可以搜索城市并得到结果,但当我搜索数字时,它不会找到它。所以我的问题是,如何让我的搜索函数以这种方式运行 我的脚本和数组如下所示: 阵列小样本多维数组javascript中的搜索函数存在问题,javascript,arrays,search,Javascript,Arrays,Search,我有一个包含城市名称和邮政编码的数组,我需要在其中搜索,我可以搜索城市并得到结果,但当我搜索数字时,它不会找到它。所以我的问题是,如何让我的搜索函数以这种方式运行 我的脚本和数组如下所示: 阵列小样本 Array ( [0] => Array ( [0] => 9900 [1] => Town 1 ) [1] => Array ( [0] => 9900 [1] =>
Array
(
[0] => Array
(
[0] => 9900
[1] => Town 1
)
[1] => Array
(
[0] => 9900
[1] => Town 2
)
[2] => Array
(
[0] => 9940
[1] => Town 3
)
[3] => Array
(
[0] => 9970
[1] => Town 4
)
[4] => Array
(
[0] => 9981
[1] => Town 5
)
)
$(document).ready(function(){
$(".searchinput").keyup(function(){
var b = document.getElementsByClassName('searchinput')[0].value;
var b = document.getElementById("Searchfield")
var SearchValue=b.value;
var i=0, k=0, indx=[], msg;
for ( i=0; i<postnummer.length; i++)
{ for ( k=0; k<postnummer[i].length; k++)
{ if (postnummer[i][k] === SearchValue){ indx = [i,k]; break; }
} }
if(typeof indx[0] == "undefined" || typeof indx[1] == "undefined"){
msg=("Not found"); }
else { msg="i= "+indx[0]+" k= "+indx[1]; }
var a = document.getElementById("Result");
a.value = b.value + " - " + msg ;
});
});
数组
(
[0]=>阵列
(
[0] => 9900
[1] =>城镇1
)
[1] =>阵列
(
[0] => 9900
[1] =>城镇2
)
[2] =>阵列
(
[0] => 9940
[1] =>城镇3
)
[3] =>阵列
(
[0] => 9970
[1] =>城镇4
)
[4] =>阵列
(
[0] => 9981
[1] =>城镇5
)
)
$(文档).ready(函数(){
$(“.searchinput”).keyup(函数(){
var b=document.getElementsByClassName('searchinput')[0]。值;
var b=document.getElementById(“搜索字段”)
var SearchValue=b.值;
变量i=0,k=0,indx=[],msg;
对于(i=0;i,这是因为您在if条件下执行(==
):
postnummer[i][k] === SearchValue
b.value
返回字符串()。如果在输入中键入a9900
,SearchValue
将为“9900”,而不是9900
这里有一个工作片段
$(文档).ready(函数(){
$(“.searchinput”).keyup(函数(){
变量postnummer=[
[9900,‘城镇1’],
[9900,‘城镇2’],
[9940,‘城镇3’],
[9970,‘城镇4’],
[9981,‘城镇5’]
],
b=document.getElementById(“搜索字段”),
SearchValue=b.value,//返回一个字符串
i=0,
k=0,
indx=[];
对于(i=0;i1)
console.log(indx)
});
});
因为需要将搜索值与字符串
或数字
进行比较。如果转换失败(即parseInt
返回NaN
),您可能希望尝试将其转换为数字
,并返回原始字符串值:
然后,只需使用严格的比较:
postnummer[i][k] === SearchValue
通过这种方式,您将保留通过数值和字符串值进行比较的可能性。作为另一种解决方案,您可以在postnummer
数组上使用.reduce
,以确定找到的搜索主题索引
如果输入9900
,将返回两个数组。如果执行此操作,将获得第一个数组的索引和其中9900
的索引。此外,还将获得第二个数组的索引和9900
所在位置的索引
请参见下面的工作示例:
const postnumber=[9900'城镇1'],[9900'城镇2'],[9940'城镇3'],[9970'城镇4'],[9981'城镇5'],
search='9900',/*9900(int)由于.reduce中的“==”也起作用(不严格测试该值)*/
res=postnumber.reduce((acc,[num,town],i)=>{
if(num==search)返回[…acc,[i,0]];
如果(town==search)返回[…acc,[i,1]];
返回acc;
}, []);
console.log(res);
请为您的问题创建一个片段,因为这是一个纯JavaScript问题,请提供JavaScript表示法的数组示例(使用console.log(JSON.stringify(postnummer))
)而不是PHP。[[9900',Town 1'],[9900',Town 2'],[9940',Town 3'],[9970',Town 4'],[9981',Town 5']
是数组(猜测数据类型)如果可以的话,您可以使用array.filter()
来简化代码。类似.filter(函数(位置){return location[0]==9900;});
的功能已经让您走了很长一段路。很抱歉,回复太晚了,这非常有效,比我尝试做的要简单得多。
postnummer[i][k] === SearchValue