Jak odczytać to metodą filter?

0

Jak zrobić to tak aby metodą filter wyświetliło mi tylko tylko wyniki z tej tablicy 6, 3

const array = [[7, 5, [6, 3]], 1, 2, 4];
const result = ar.filter(function (number) {
  return number[0] > 1;
});

console.log(result);
5
  1. Ten kod nie zadziała, do filtrowania podajesz ar zamiast array (poza tym tego typu nazwy mogą być mylone ze słowami kluczowymi, wiec lepiej zmień array na ar)
  2. Pierwsza zmienna to tablica zawierająca tablicę wielokrotnie zagnieżdżone, poszukiwany przez Ciebie element to [6, 3] czy ogólnie chcesz wyłuskać elementy o wartościach 6 albo 3?
  3. Funkcja filter przeleci Ci przez każdy element tablicy i zwróci te elementy, które spełnią warunek, ale jeśli tym elementem jest kolejna tablica to Twoje porównanie trzeba będzie zmienić.

Gotowca Ci nie podam, bo musialbym siedziec przy moim komputerze, ale powyzsze powinny Cie naprowadzic na dobry trop.

2
lukaszzgz napisał(a):

Jak zrobić to tak aby metodą filter wyświetliło mi tylko tylko wyniki z tej tablicy 6, 3

const array = [[7, 5, [6, 3]], 1, 2, 4];
const result = ar.filter(function (number) {
  return number[0] > 1;
});

console.log(result);

No to zależy na podstawie jakiego kryterium chcesz wyciągnąć tą tablice. Bo masz podwójnie zagnieżdżony array. Więc zależy co chcesz zrobić?

  • Wyciągnąć pierwszy podwójnie zgnieżdżony array?
  • Wyciągnąć każdy podwójnie zgnieżdżony array?
  • Wyciągnąć drugi element pierwszego zagnieżdżenia
  • inny...?
1
lukaszzgz napisał(a):

Jak zrobić to tak aby metodą filter wyświetliło mi tylko tylko wyniki z tej tablicy 6, 3

to nie "tablica", a zagnieżdżona "tablica tablic". Można ją spłaszczyć nową metodą flat(o której dowiedziałem się odpisując w tym wątku i przeglądając MDN, żeby dobrze odpowiedzieć. Więc odpowiadanie na pytania kształci). Masz podwójnie zagnieżdżoną, więc dajesz 2 jako argument:

[[7, 5, [6, 3]], 1, 2, 4].flat(2); // [ 7, 5, 6, 3, 1, 2, 4]

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat

i na tym etapie już możesz łatwo użyć metody filter (bo zamiast zagnieżdżonej "tablicy tablic" masz normalną tablicę).
Jednak, co chcesz uzyskać? Jakie mają być dokładne kryteria filtrowania?

0

Chodzi mi o to jak metodą filter można odczytać najbardziej tą najbardziej zagnieżdżoną tablicę 3 stopnia. I Pytanie jak wyświetlić pierwsżą taką tablice która jest 3 stopnia i drugi przypadek jak wyświetlić wszystkie tablice którą są 3 stopnia ?

1

Z użyciem metody flat miałbyś dostęp do wszystkich liczb, nawet tych zagnieżdżonych. Jednak wtedy operowałbyś na spłaszczonej tablicy. Jeśli zależy ci jednak na zachowaniu zagnieżdżeń, to wtedy zamiast używać filter piszesz własną funkcję, która przechodzi przez daną tablicę, ale patrzy czy dany element jest tablicą i jeśli jest tablicą, to wchodzi głębiej (np. za pomocą rekurencji). Czyli takie przechodzenie drzewa:

pseudokod

function my_visit(array):
  for item in array:
     if is_array(item):
        my_visit(item)
     else:  
        do_something_with_number(item)
jak wyświetlić wszystkie tablice którą są 3 stopnia ?

tzn. tylko te tablice, które są gdzieś tam głęboko?
dla
[ 1, 2, [3, [4, 5]], [6, [7, 8]] ]
powinno się wyświetlić [4, 5] oraz [7, 8]?

no to przechodząc przez tablicę (tak jak w pseudokodzie) mógłbyś śledzić poziom zagnieżdżenia i przy każdym wejściu w głąb zwiększać go, a przy wychodzeniu zmniejszać. Wtedy za każdą iteracją wiedziałbyś, który poziom ogarniasz i czy wyświetlić czy nie.

3

Dam gotowe rozwiązanie, ale jest tak zamotane, że pożałujesz że o to pytałeś.
Za karę będziesz dochodził: "o co tu chodzi?".

Funkcja zwraca tablicę zawierającą najgłębiej zagnieżdżone tablice (dowolna głębokość).

function returnDeepestArrays(ar) {
    const results = [];
    function getNestedArrays(arr, passes = 0) {
        for (const item of arr) {
            if (Array.isArray(item) && item.some((i) => Array.isArray(i))) {
                getNestedArrays(item, passes + 1);
            } else if (Array.isArray(item)) {
                results.push({ passes, item });
            }
        }
    }
    if (ar.some((item) => Array.isArray(item))) {
        getNestedArrays(ar);
        return results.filter((i) => i.passes === Math.max(...results.map((y) => y.passes))).map((k) => k.item);
    }
    return [ar];
}
console.log(returnDeepestArrays([[7, 5, [6, 3]], 1, 2, 4])); // => [[6, 3]]
console.log(returnDeepestArrays([[5, 5, [4, 4, [2, 2]]], 1, 2, 4, [2, 2, [1, 1, [9, 9]]]])); // => [[2, 2], [9, 9]]
console.log(returnDeepestArrays([4, 4, 2])); // => [[4, 4, 2]]

https://jsfiddle.net/9fwu7n58/

1 użytkowników online, w tym zalogowanych: 0, gości: 1