Как найти слово в массиве Javascript? - PullRequest
0 голосов
/ 14 мая 2018

Мой вопрос: как мне найти все индексы массива по слову?

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

Если я ищу "Джефф", я хочу получить:

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

Ответы [ 4 ]

0 голосов
/ 14 мая 2018

Чтобы сделать его более универсальным, вы можете взять функцию, которая принимает массив объектов, искомый ключ и строку поиска, которая позже используется как строчная строка.

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'));
0 голосов
/ 14 мая 2018

Используйте Array#map в исходном массиве и возвращайте индексы.Затем отфильтровывает значения undefined:

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);
0 голосов
/ 14 мая 2018

Используйте метод массива filter вместе с indexOf. filter вернет новый массив совпадающих элементов. В стороне функции обратного вызова фильтра проверьте имя, где ключевое слово indexOf не является -1. То есть имя должно содержать ключевое слово

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'))
0 голосов
/ 14 мая 2018

Использование .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);

Если вы хотите проверить, является ли "Джефф" где-нибудь , а не только в начале, используйте .includes вместо:

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);

Это функции ES6.Для ES5 используйте indexOf вместо:

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);
...