использовать фильтр для возврата значений свойств в объект
Попытка сделать функцию, которая использует фильтр, но не функцию for или while или foreach, которая будет циклически перебирать массив объектов только для возврата значений свойств. Например,
function getShortMessages(messages) {
return messages.filter(function(obj){
return obj.message
});
поэтому, если я позвоню
getShortMessages([{message:"bleh"},{message:"blah"}]);
Я должен получить возврат массива = ["bleh", "blah"] Я просто не уверен, как реализовать фильтр в соответствии с этими рекомендациями. Также я думал об использовании функции цепочки, возможно,.map.
////Вот вся спецификация вызова кода /////
Basic: Filter Упражнение 4 из 18
задача
Используйте фильтр Array #, чтобы написать функцию getShortMessages.
getShortMessages принимает массив объектов с свойствами ".message" и возвращает массив сообщений длиной менее 50 символов.
Функция должна возвращать массив, содержащий сами сообщения, без их содержащего объекта.
аргументы
-
messages: массив от 10 до 100 случайных объектов, которые выглядят примерно так:
{message: 'Esse id amet quis eu esse aute officia ipsum.' //random }//random}
условия
- Не используйте для циклов /while или Array # forEach.
- Не создавайте ненужных функций, например, помощников.
намек
- Попробуйте связать несколько методов Array!
пример
[ 'Tempor quis esse consequat sunt ea eiusmod.',
'Id culpa ad proident ad nulla laborum incididunt.',
'Ullamco in ea et ad anim anim ullamco est.',
'Est ut irure irure nisi.' ]
Ресурсы
Boilerplate
function getShortMessages(messages) {
// SOLUTION GOES HERE
}
module.exports = getShortMessages
"Чтобы снова напечатать эти инструкции, запустите: function-javascript print" Чтобы выполнить вашу программу в тестовой среде, запустите: function-javascript run program.js "Чтобы проверить вашу программу, запустите: function-javascript verify program.js" Для справки run: функциональная поддержка javascript
Ответы
Ответ 1
Используйте .filter
если вы хотите получить весь объект (ы), которые соответствуют ожидаемому свойству или свойствам. Используйте .map
когда у вас есть множество вещей, и вы хотите сделать какую-то операцию над этими вещами и получить результат.
Задача состоит в том, чтобы получить все сообщения длиной не более 50 символов. Таким образом, вы можете использовать filter
чтобы получать только те сообщения, которые прошли этот тест, а затем map
чтобы получить только текст сообщения.
function getShortMessages(messages) {
return messages
.filter(function(obj) {
return obj.message.length <= 50;
})
.map(function(obj) {
return obj.message;
});
}
JSFiddle: http://jsfiddle.net/rbbk65sq/
Если входные объекты могут не иметь свойства message
, вы можете проверить его с помощью obj.message && obj.message.length <= 50
следующим образом:
function getShortMessages(messages) {
return messages
.filter(function(obj) {
return obj.message && obj.message.length <= 50;
})
.map(function(obj) {
return obj.message;
});
}
ES6
Те же примеры кода в ES6:
const getShortMessages = messages => messages
.filter(obj => obj.message.length <= 50)
.map(obj => obj.message);
И если входные объекты могут не иметь свойства message
:
const getShortMessages = messages => messages
.filter(obj => obj.message && obj.message.length <= 50)
.map(obj => obj.message);
JSFiddle: http://jsfiddle.net/npfsrwjq/
Ответ 2
Хотя я понимаю, что эта тема очень стар, я счел необходимым прокомментировать в случае, если кто-то снова наткнется на нее. Я бы сделал это, как описано выше, используя синтаксис es6 следующим образом:
objects.filter(obj => obj.key === 'value').map(filteredObj => filteredObj.key);
Таким образом, приведенный выше пример:
getShortMessages = (messages) => {
return messages.filter(obj => obj.message.length <= 50).map(obj => obj.message);
}
Ответ 3
С пользовательским возвращаемым значением (Простой пример ES6);
const customReturnFiltere = (result) => {
return products.filter((obj) => {
return obj.stock !== 0;
})
.map((finalResult) => {
return {
...finalResult,
info: 'product has been filtered if stock is 0'
}
});
}