Pracuję z Javascript (ES6) / FaceBook reaguję i próbuję uzyskać pierwsze 3 elementy tablicy o różnej wielkości. Chciałbym zrobić odpowiednik Linq weź (n).
W moim pliku Jsx mam następujące elementy:
var items = list.map(i => {
return (
<myview item={i} key={i.id} />
);
});
Następnie, aby zdobyć pierwsze 3 przedmioty, które próbowałem
var map = new Map(list);
map.size = 3;
var items = map(i => {
return (<SpotlightLandingGlobalInboxItem item={i} key={i.id} />);
});
To nie działało, ponieważ mapa nie ma ustawionej funkcji.
Czy możesz mi pomóc?
javascript
reactjs
użytkownik1526912
źródło
źródło
list.slice(0, 3);
a następnie powtórzyć?Odpowiedzi:
Wierzę, że szukasz:
źródło
Aby uzyskać pierwsze
n
elementy tablicy, użyjźródło
slice
funkcja tablic zwraca płytką kopię tablicy i nie modyfikuje oryginalnej tablicy. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Może to być zaskakujące, ale
length
właściwość tablicy służy nie tylko do uzyskania liczby elementów tablicy, ale jest także zapisywalna i może być używana do ustawiania długości łącza MDN tablicy . Spowoduje to mutację tablicy.Jeśli bieżąca tablica nie jest już potrzebna i nie obchodzi Cię niezmienność lub nie chcesz przydzielać pamięci, tj. W przypadku gry najszybszym sposobem jest
aby opróżnić tablicę
źródło
arr = []
?Nie próbuj tego robić za pomocą funkcji mapy. Funkcja mapowania powinna być używana do mapowania wartości z jednej rzeczy na drugą. Gdy liczba wejść i wyjść jest zgodna.
W takim przypadku użyj funkcji filtrowania, która jest również dostępna w tablicy. Funkcja filtrowania jest używana, gdy chcesz selektywnie przyjmować wartości przetwarzając określone kryteria. Następnie możesz napisać swój kod jak
źródło
Możesz filtrować za pomocą
index
tablicy.źródło
.filter
sam w sobie nie jest dobrym wyborem, przynajmniej jeśli tablica wejściowa może być długa..filter
przechodzi przez każdy element tablicy sprawdzając jej stan..slice
nie zrobiłby tego, ale po prostu wyodrębniłby pierwsze n elementów, a następnie zatrzymałby przetwarzanie - co na pewno byłoby tym, czego oczekujesz od długiej listy. (Jak już powiedział @elQueFaltaba w komentarzach do innej odpowiedzi).Poniższe działało dla mnie.
Oto przykład
źródło
slice
ale w drugim używaszsplice
.["Apple", "Mango"]
z tego. Pierwsza część wycinka to nie „od czego zacząć usuwanie”, ale od której zaczyna się wycinek. Nie modyfikuje oryginalnej tablicy i niczego nie usuwa.Dzięki https://github.com/Siderite/LInQer możesz przejść do Enumerable.from (list) .take (3) .toArray ();
źródło
Użyj filtru
Nie najlepsza praktyka, ale inny sposób
const cutArrByN = arr.filter((item, idx) => idx < n);
źródło