繁体   English   中英

从JavaScript数组搜索元素列表的最佳方法

[英]Best way to search list of elements from javascript array

下面是我要搜索名称“ gali”,“ john”和“ joe”的数组

var dummyArray =  [{
    "fname": "gali",
    "lname": "doe"
}, {
    "fname": "john",
    "lname": "danny"
}, {
    "fname": "joe",
    "lname": "dawns"
}, {
    "fname": "liji",
    "lname": "hawk"
}]

一种方法是使用grep和$ .each

   var searchcriteria['gali','john','joe'];
   var newArray = [];
   $(searchcriteria).each(function( index ) {
         var item= j$.grep(dummyArray , function(dt) {
         return (dt.fname== searchcriteria[index]);
   });
   newArray.push(item);
});

有更好的方法吗?

结合使用原生JavaScript filter()方法和indexOf()

 var dummyArray = [{ "fname": "gali", "lname": "doe" }, { "fname": "john", "lname": "danny" }, { "fname": "joe", "lname": "dawns" }, { "fname": "liji", "lname": "hawk" }] var searchcriteria = ['gali', 'john', 'joe']; var newArray = dummyArray.filter(function(ele) { return searchcriteria.indexOf(ele.fname) > -1; }); console.log(newArray); 


最好将搜索值存储在一个对象中,因为indexOf()方法非常慢。

 var dummyArray = [{ "fname": "gali", "lname": "doe" }, { "fname": "john", "lname": "danny" }, { "fname": "joe", "lname": "dawns" }, { "fname": "liji", "lname": "hawk" }] var searchcriteria = {'gali':true, 'john':true, 'joe':true}; var newArray = dummyArray.filter(function(ele) { return searchcriteria[ele.fname]; }); console.log(newArray); 

您可以使用.filter

var dummyArray =  [{
    "fname": "gali",
    "lname": "doe"
}, {
    "fname": "john",
    "lname": "danny"
}, {
    "fname": "joe",
    "lname": "dawns"
}, {
    "fname": "liji",
    "lname": "hawk"
}];

var searchcriteria = ['gali','john','joe'];
var output = dummyArray.filter(function(x){
 return  searchcriteria.indexOf(x.fname)!=-1
});

console.log(output)

您可以将Array#filterArray#includes箭头函数一起使用

dummyArray.filter(o => searchcriteria.includes(o.fname));

 var dummyArray = [{ "fname": "gali", "lname": "doe" }, { "fname": "john", "lname": "danny" }, { "fname": "joe", "lname": "dawns" }, { "fname": "liji", "lname": "hawk" }]; var searchcriteria = ['gali', 'john', 'joe']; var result = dummyArray.filter(o => searchcriteria.includes(o.fname)); console.log(result); 

对于不支持EcmaScript 6的旧版浏览器,等效代码为

dummyArray.filter(function (o) {
    return searchcriteria.indexOf(o.fname) !== -1;
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM