użyj filtra, aby zwrócić wartości właściwości obiektu
Próba utworzenia funkcji, która używa filtra, ale nie pętli for lub while lub funkcji foreach, która będzie pętlą przez tablicę obiektów tylko w celu zwrócenia ich wartości właściwości. Na przykład,
function getShortMessages(messages) {
return messages.filter(function(obj){
return obj.message
});
}
Więc jeśli zadzwonię
getShortMessages([{message:"bleh"},{message:"blah"}]);
I should get a return of an array = ["bleh", " blah"] Po prostu nie jestem pewien, jak wdrożyć filtr zgodnie z tymi wytycznymi. Myślałem też o użyciu funkcji łańcuchowej .Mapa.
/ / / / Oto całe wyzwanie związane z kodem Specyfikacja / / / / /
Basic: Filter Ćwiczenie 4 z 18
Zadanie
Użyj Array # filter do napisania funkcji o nazwie getShortMessages.
GetShortMessages pobiera tablicę obiektów z'.message ' właściwości i zwraca tablicę wiadomości o długości mniejszej niż
Funkcja powinna zwracać tablicę zawierającą same wiadomości, bez ich obiektu zawierającego.
Argumenty
- wiadomości: tablica od 10 do 100 losowe obiekty, które wyglądają mniej więcej tak:
{
message: 'Esse id amet quis eu esse aute officia ipsum.' // random
}
Warunki
- nie używaj żadnych pętli for/while ani tablicy#forEach.
- Nie twórz żadnych zbędnych funkcji np. helperów.
Podpowiedź
- spróbuj połączyć jakąś tablicę metody!
Przykład
[ '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.' ]
Zasoby
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
Boilerplate
function getShortMessages(messages) {
// SOLUTION GOES HERE
}
module.exports = getShortMessages
" aby ponownie wydrukować te instrukcje, Uruchom: functional-javascript print "Aby uruchomić program w środowisku testowym, Uruchom: funkcjonalny-uruchamiany program javascript.js "Aby zweryfikować swój program, uruchom: functional-javascript verify program.js "For help run: functional-javascript help
5 answers
Użyj .filter
, Gdy chcesz uzyskać cały obiekt(y) zgodny z oczekiwaną właściwością lub właściwościami. Użyj .map
, Gdy masz tablicę rzeczy i chcesz wykonać jakąś operację na tych rzeczach i uzyskać wynik.
Wyzwaniem jest uzyskanie wszystkich wiadomości, które mają 50 znaków lub mniej. Możesz więc użyć filter
, aby uzyskać tylko wiadomości, które przeszły ten test, a następnie map
, aby uzyskać tylko tekst wiadomości.
function getShortMessages(messages) {
return messages
.filter(function(obj) {
return obj.message.length <= 50;
})
.map(function(obj) {
return obj.message;
});
}
JSFiddle: http://jsfiddle.net/rbbk65sq/
Jeśli możliwe jest, aby obiekty wejściowe nie miały właściwości message
, powinieneś przetestować ją za pomocą obj.message && obj.message.length <= 50
w następujący sposób:
function getShortMessages(messages) {
return messages
.filter(function(obj) {
return obj.message && obj.message.length <= 50;
})
.map(function(obj) {
return obj.message;
});
}
ES6
Ten sam kod w ES6:
const getShortMessages = (messages) => messages
.filter(obj => obj.message.length <= 50)
.map(obj => obj.message);
I jeśli obiekty wejściowe mogą nie posiadać właściwości message
:
const getShortMessages = (messages) => messages
.filter(obj => obj.message && obj.message.length <= 50)
.map(obj => obj.message);
JSFiddle: http://jsfiddle.net/npfsrwjq/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-26 02:35:58
Choć zdaję sobie sprawę, że ten wątek jest super Stary, uznałem za konieczne skomentować w przypadku, gdy ktoś potyka się na nim ponownie. Zrobiłbym to tak jak wyżej używając składni es6 w ten sposób:
objects.filter(obj => obj.key === 'value').map(filteredObj => filteredObj.key);
Tak więc powyższy przykład brzmiałby:
getShortMessages = (messages) => messages.filter(obj => obj.message.length <= 50).map(obj => obj.message);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-31 23:01:38
Z niestandardową wartością zwracaną (prosty przykład 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'
}
});
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-07 09:36:29
W przypadku, gdy ktoś szuka pojedynczego przejścia przez to można zrobić za pomocą .reduce()
Więc zamiast robić:
const getShortMessages = (messages) => messages
.filter(obj => obj.message.length <= 50)
.map(obj => obj.message);
Możesz zrobić:
const getShortMessages = (messages) => {
return messages.reduce((shortMessages, i) => {
if (i.message.length <= 50) {
shortMessages.push(i.message)
}
return shortMessages
},[])
}
Lub jeśli chcesz jeszcze krótszą rękę:
const getShortMessages = (messages) => messages.reduce((shortMessages, item) => (item.message.length <= 50)
? shortMessages=[...shortMessages,item.message] : shortMessages,[])
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-06 03:28:46
Dodatkowo używam destrukcji ES6 z filtrem i porównuję dwie tablice obiektów. I wreszcie mapować konkretne pola, których potrzebuję.
Inicjalizacja
const bumperDealRules =[]; // Array object
const cartItems =[]; // Array object
Kod końcowy
const bumperDealsSelected = bumperDealRules.filter(
({ item_display_id: item_display_id, purchasequantity: purchasequantity })
=> cartItems.some(({ id: id, action_from: action_from, order_qty: order_qty })
=> id === item_display_id && purchasequantity <= order_qty && action_from == 'bumper_deal' )
).map(function(obj) {
return {
bumper_deal_company_name_id: obj.bumper_deal_company_name_id,
from_amount: obj.from_amount,
to_amount: obj.to_amount,
discount: obj.discount,
highest_limit: obj.highest_limit
};
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-29 13:51:23