Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多维数组javascript中的搜索函数存在问题_Javascript_Arrays_Search - Fatal编程技术网

多维数组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
返回字符串()。如果在输入中键入a
9900
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