У меня есть объект 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;
}
});
}
Но выше, похоже, не работает... Я не знаю, правильно ли я нахожусь на правильном пути?
Помимо 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);
Метод фильтра всегда должен возвращать логическое значение, это похоже на возвращение строки с именем.
Взгляните на документы для метода.filter: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
return i.name
наreturn true