• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Filtrowanie tablicy

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
1,251 wizyt
pytanie zadane 12 lutego 2018 w JavaScript przez Anoonymous Obywatel (1,560 p.)
edycja 12 lutego 2018 przez Anoonymous

Mam w tablicy przykładowy element:

zxcdsa.com/photo-277590-30x24.jpeg

Filtruje elementy za pomocą: 

  var newArray = someImages.filter(function (el) {
  return el.width >= 400 ||
         el.class.indexOf('post-image') > -1
....
});

Chciałbym móc odrzucić elementy, które w swojej nazwie (el.src) posiada ciąg znaków od np. 30x30 do 350x350. W jaki sposób mogę uzyskać owy efekt?

komentarz 12 lutego 2018 przez ShiroUmizake Nałogowiec (46,300 p.)

wp-content

No chyba nie...

komentarz 12 lutego 2018 przez Anoonymous Obywatel (1,560 p.)

eh... mam stringa w tablicy i tyle

jeśli nazwa wp-content tak bardzo ci ciąży to zamień se to na qwert123... dzięki za zainteresowanie, ale napisałem w pytaniu jak muszę to uzyskać

komentarz 12 lutego 2018 przez ShiroUmizake Nałogowiec (46,300 p.)
Ale po co masz kombinować jak możesz użyć gotowe metody?? Nie masz dostępu do wp?
komentarz 12 lutego 2018 przez Anoonymous Obywatel (1,560 p.)

nie

inaczej, mam taki string:

zxcdsa.com/photo-277590-30x24.jpeg

 

komentarz 12 lutego 2018 przez ShiroUmizake Nałogowiec (46,300 p.)

Jeżeli rozmiar się zmieni to najłatwiej po indexOf. Inaczej musisz wysplitować wartości i je porównać Ale ja bym zrobił to tak:

Wywołuje kolejkę requestów, na każdą wrzucam obiekt Image (bez arg), a następnie filtruje po właściwości img.height i img.width albo by było poprawnie w kolejce to po tym jak promise.all rozwiąże wzzystkie resolve (chyba fetchAPI tego nie obsługuje) i potem filter i już mam swoje zdjęcia, odpalam odpowiednią obiecankę co ma się stać. Powinno to tak wyglądać.

return this.getImages(data).then(images => filterImages()).then(()=>doSomething(filterImagesArray));

 

1 odpowiedź

+1 głos
odpowiedź 12 lutego 2018 przez ScriptyChris Mędrzec (190,190 p.)

Moja propozycja:

const strings = [
  'zxcdsa.com/wp-content/uploads/2017/01/maj=photo-277590-29x250.jpeg',
  'zxcdsa.com/wp-content/uploads/2017/01/maj=photo-277590-30x250.jpeg',
  'zxcdsa.com/wp-content/uploads/2017/01/maj=photo-277590-30x251.jpeg',
  'zxcdsa.com/wp-content/uploads/2017/01/maj=photo-277590-20x350.jpeg'
];
const min = 30;
const max = 250;
const delimiter = 'x';

const withinNumericInterval = strings.filter( ( string ) => {
  return string.match( /\d+x\d+/ )[ 0 ]
                      .split( delimiter )
                      .every( ( number ) => {
                          return number >= min && number <= max;
                      } );
} );

console.log( withinNumericInterval ); // ["zxcdsa.com/wp-content/uploads/2017/01/maj=photo-277590-30x250.jpeg"]

Ktoś lepszy z regexów mógłby zaleźć optymalne wyrażenie.

komentarz 12 lutego 2018 przez Anoonymous Obywatel (1,560 p.)

to jest to, ale powoduje błąd, jeśli string nie ma YYxYY

TypeError: Cannot read property '0' of null

np.

zxcassda.com/zxc-zxc-t534.png

 

komentarz 12 lutego 2018 przez ScriptyChris Mędrzec (190,190 p.)

W callbacku do string.filter dodaj sprawdzanie, czy metoda match coś znalazła:

const withinNumericInterval = strings.filter( ( string ) => {
    const numbers = string.match( /\d+x\d+/ );
    return numbers && numbers[ 0 ]
                      .split( delimiter )
                      .every( ( number ) => {
                          return number >= min && number <= max;
                      } );
} );

 

Podobne pytania

0 głosów
3 odpowiedzi 2,015 wizyt
pytanie zadane 27 listopada 2019 w JavaScript przez michal_php Stary wyjadacz (13,700 p.)
0 głosów
3 odpowiedzi 885 wizyt
0 głosów
0 odpowiedzi 164 wizyt

93,443 zapytań

142,434 odpowiedzi

322,691 komentarzy

62,805 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...