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

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

Author: Sasuke Uchiha, 2015-07-03

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/

 100
Author: Cymen,
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);
 8
Author: jbalesteri,
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'
        }
    });
}
 4
Author: Aathi,
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,[])
 1
Author: Manfred H,
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
             };
          });
 0
Author: Majedur Rahaman,
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