Как фильтровать данные JSON по свойствам, которые содержат определенные строки?

0

У меня есть объект JSON, который выглядит так:

{
  'name': 'Bob',
  'friends': [
    {
      'name' : 'Ashley (Family)'
    },
    {
      'name' : 'Steven (Non-Family)'
    },
    {
      'name' : 'Chris (Family)'
    }
  ]
}

Как я могу отфильтровать выше, чтобы он возвращал только друзей, которые являются родными? т.е. друзья, которые называют "Семья"?

function filterFriends (friends) {

  return friends.filter(function(i) {
    if (i.name.indexOf('(Family)') > -1) {
      return i.name;
    }
  });

}

Но выше, похоже, не работает... Я не знаю, правильно ли я нахожусь на правильном пути?

  • 0
    заменить return i.name на return true
  • 0
    Вы говорите, что это не работает, что вы видите?
Показать ещё 2 комментария

2 ответа

0
Лучший ответ

Помимо a) с использованием фразы "Объект JSON", которая не имеет смысла и b) полагаясь на неаккуратное автоматическое кастинг булевых, у вас действительно нет проблем. Этот "ответ" с небольшими техническими улучшениями продемонстрирует, что ваш код в порядке.

var data = {
  name: 'Bob',
  friends: [
    {
      name: 'Ashley (Family)'
    },
    {
      name: 'Steven (Non-Family)'
    },
    {
      name: 'Chris (Family)'
    }
  ]
};

var family = data.friends.filter(f => f.name.indexOf('(Family)') > -1);

console.log(family);
// [{name: 'Ashley (Family)'}, {name: 'Chris (Family)'}]

Если вы хотите записать его в функцию

function isFamily(name) {
  return name.indexOf('(Family)') > -1;
}

function getFamily(friends) {
  return friends.filter(f => isFamily(f.name));
}

var family = getFamily(data.friends);

ES5

var family = data.friends.filter(function(f) {
  return f.name.indexOf('(Family)') > -1);
});

console.log(family);
  • 1
    Твой путь точно такой же, как и у ОП, ты пытался понять его проблему?
  • 0
    @ Мотти извините, но вы не знаете, что означает слово «точный».
Показать ещё 6 комментариев
0

Метод фильтра всегда должен возвращать логическое значение, это похоже на возвращение строки с именем.

Взгляните на документы для метода.filter: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

  • 1
    Это не обязательно. JavaScript правда / ложь будет просто отлично.
  • 0
    да, это правда, но я хотел сказать, что он всегда возвращает правду ...
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню