简体   繁体   中英

How to find a word in Javascript array?

My question is, how can I find all array indexes by a word ?

[
{name: "Jeff Crawford", tel: "57285"},
{name: "Jeff Maier", tel: "52141"},
{name: "Tim Maier", tel: "73246"}
]

If I search for "Jeff", I want to get:

[
{name: "Jeff Crawford", tel: "57285"},
{name: "Jeff Maier", tel: "52141"},
]

To make it more versatile, you could take a function which takes an array of objects, the wanted key and the search string, wich is later used as lower case string.

 function find(array, key, value) { value = value.toLowerCase(); return array.filter(o => o[key].toLowerCase().includes(value)); } var array = [{ name: "Jeff Crawford", tel: "57285" }, { name: "Jeff Maier", tel: "52141" }, { name: "Tim Maier", tel: "73246" }] console.log(find(array, 'name', 'Jeff')); 

Use .filter :

 const input=[{name:"Jeff Crawford",tel:"57285"},{name:"Jeff Maier",tel:"52141"},{name:"Tim Maier",tel:"73246"}] const filtered = input.filter(({ name }) => name.startsWith('Jeff')); console.log(filtered); 

If you want to check to see if "Jeff" is anywhere rather than only at the beginning, use .includes instead:

 const input=[{name:"Jeff Crawford",tel:"57285"},{name:"foo-Jeff Maier",tel:"52141"},{name:"Tim Maier",tel:"73246"}] const filtered = input.filter(({ name }) => name.includes('Jeff')); console.log(filtered); 

These are ES6 features. For ES5, use indexOf instead:

 var input=[{name:"Jeff Crawford",tel:"57285"},{name:"foo-Jeff Maier",tel:"52141"},{name:"Tim Maier",tel:"73246"}] var filtered = input.filter(function(obj){ return obj.name.indexOf('Jeff') !== -1; }); console.log(filtered); 

Use Array#map on the original array and return the indices. Then filter out the undefined values:

 const data = [{name:"Jeff Crawford",tel:"57285"},{name:"Jeff Maier",tel:"52141"},{name:"Tim Maier",tel:"73246"}]; const indices = data.map((item, i) => { if (item.name.startsWith('Jeff')) { return i; } }) .filter(item => item !== undefined); console.log(indices); 

Use array filter method along with indexOf . filter will return a new array of matched element. In side the filter callback function check for the name where the indexOf the keyword is not -1 . That is the name should contain the keyword

 var originalArray = [{ name: "Jeff Crawford", tel: "57285" }, { name: "Jeff Maier", tel: "52141" }, { name: "Tim Maier", tel: "73246" } ] function getMatchedElem(keyWord) { return originalArray.filter(function(item) { return item.name.indexOf(keyWord) !== -1 }) } console.log(getMatchedElem('Jeff')) 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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