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"},
]
-
2You have anything that you tried?Krishna Prashatt– Krishna Prashatt2018年05月14日 06:21:33 +00:00Commented May 14, 2018 at 6:21
-
You want only indices or the elements?31piy– 31piy2018年05月14日 06:21:55 +00:00Commented May 14, 2018 at 6:21
-
Please visit the help center, take the tour to see what and How to Ask. Do some research, search for related topics on SO; if you get stuck, post a minimal reproducible example of your attempt, noting input and expected output.mplungjan– mplungjan2018年05月14日 06:26:18 +00:00Commented May 14, 2018 at 6:26
4 Answers 4
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'));
Comments
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);
Comments
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);
Comments
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'))
Comments
Explore related questions
See similar questions with these tags.