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

funkcja przyjmująca dwie tablicę, zwracająca nową tablicę zawierającą sumę każdego elementu z tych tablic

Object Storage Arubacloud
+1 głos
2,126 wizyt
pytanie zadane 19 lutego 2017 w JavaScript przez svyatogor92 Użytkownik (670 p.)

Witam,

rozwiązuję zadanie o następującej treści:

Napisz funkcję addArrays, która ma przyjmować dwa argumenty – dwie tablice zawierające liczby całkowite. Funkcja ta ma zwracać również tablicę, która będzie wynikiem dodawania każdego elementu o tym samym indeksie. Jeżeli, tablice nie są równe, elementy nadmiarowe są przepisywane do nowej tablicy.

stworzyłem coś takiego:

function addArrays(arr1, arr2) {
  var newArray = [];
  var newArray2 = [];
  for(i = 0; i < arr1.length; i++) {
    for(j = 0; j < arr2.length; j++) {
      if(arr1.length === arr2.length) {
        newArray = [i+j];
        return newArray;
      }
    }
  }
}
console.log(addArrays([1,2,3], [2,4,4]));

jednak konsola zwraca tablicę [0]. Domyślam się, że problemem jest tutaj dodawanie elementów z obu tablic.

nie ruszyłem jeszcze drugiej części zadania, w której jeśli tablice nie są równe to ma powstać następna tablica z tymi nadmiarowymi elementami.

pomożecie?

4 odpowiedzi

0 głosów
odpowiedź 19 lutego 2017 przez xmentor Nałogowiec (49,520 p.)
edycja 19 lutego 2017 przez xmentor

Jeżeli chcesz coś dodać do tablicy to użyj metody push - myArray.push(something).

return sprawi, że pętla zatrzyma się po pierwszej iteracji.

W dodatku nie dodajesz do siebie elementów tablicy a ich indeksy.

Chyba nie do końca wiesz co dzieje się, gdy pętle są zagnieżdżone, proponuje Ci debugowanie swojego kodu. Sprawdź co dzieje się ze zmiennymi i & j w drugiej pętli(użyj console.log). Dodatkowo zapomniałeś o słowie var przy tych zmiennych.

komentarz 19 lutego 2017 przez svyatogor92 Użytkownik (670 p.)

tak, to była jakaś porażka, stworzyłem coś nowego na podstawie informacji w internecie:

var addArrays = function(arr1, arr2) {
  var newArray = [];
  var newArray2 = [];
  var longer = '';
  if (arr1.length > arr2.length) {
    longer = arr1;
  }
  else if (arr2.length > arr1.length) {
    longer = arr2;
  }
  else {
    arr1 = arr2;
  }
  for (var i = 0; i < longer.length; i++) {
    newArray.push(arr1[i] + arr2[i]);
  }
  return newArray;
  return newArray2;
}
console.log(addArrays([1,2,3,4], [1,2,3]));

Jednakże consola wyświetla [2,4,6,NaN] czyli dodaje pierwsze trzy elementy z obu tablic a 4 zapisuje jako NaN - dlaczego tak się dzieje i jak zrobić, aby elementy z tablicy dłuższej zapisywały się do nowej tablicy?

komentarz 19 lutego 2017 przez xmentor Nałogowiec (49,520 p.)
No dzieje się tak dlatego, że druga tablica ma 3 elementy a próbuje dodać element 4 z tablicy pierwszej i 4 element z tablicy drugiej(ale go nie ma).

Możesz napisać funkcje, która będzie usuwać ostatni element większej tablicy tak długo dopóki nie będzie równa drugiej tablicy. Usuwane elementy możesz przypisać do jakiejś zmiennej i dodawać je do tablicy.
0 głosów
odpowiedź 19 lutego 2017 przez niezalogowany

Na początku musisz określić, która tablica jest większa? oraz ile ma elementów? - Nowa tablica będzie miała długość większej tablicy.

var maxLength = Math.max(arr1.length, arr2.length)

Następnie pętla for

newArr[i] = arr1[i] + arr2[i]

Musisz tylko pamiętać, żeby przed dodaniem arr1[i] i arr2[i], sprawdzić co w nich siedzi. Jeśli któraś tablica będzie dłuższa, w drugiej tablicy będziesz próbował odwołać się do indexu, który nie istnieje

arr[i] zwróci wtedy undefined - trzeba zamienić tę wartość na 0 i dopiero przejść do dodawania

na koniec funkcji: return newArr

komentarz 19 lutego 2017 przez svyatogor92 Użytkownik (670 p.)
ok, ale to nie bardzo wiem gdzie to zamieścić i czy to co piszesz anuluje moje poprzednie zapisy?
komentarz 19 lutego 2017 przez niezalogowany
Na razie napisz kod, który doda tablice o tej samej długości. Później później zajmiemy się undefiend
komentarz 19 lutego 2017 przez svyatogor92 Użytkownik (670 p.)
No dobrze, ale po napisaniu kodu, który poleciłeś konsola wyrzuca jedną tablicę z jednym elementem zero ([0]) stąd moje pytanie czy mam go dodać w którymś momęcie mojego kodu czy nie.
komentarz 19 lutego 2017 przez niezalogowany
pokaż kod
komentarz 19 lutego 2017 przez svyatogor92 Użytkownik (670 p.)
var addArrays = function(arr1, arr2) {
  var newArray = [];
  var newArray2 = [];
  var maxLength = Math.max(arr1.length, arr2.length);

  for (i = 0; i < newArray.length; i++) {
    newArray[i] = arr1[i] + arr2[i];
  }
  return newArray
}
console.log(addArrays([1,2,3], [1,2,3,4]));

 

komentarz 19 lutego 2017 przez niezalogowany

Po co Ci dwie puste tablice?

i < newArray.length

newArray.length - długość pustej tablicy to 0. 

pętla for musi wykonać się tyle razy, ile elementów ma dłuższa tablica. Po to jest liczone maxLength

komentarz 19 lutego 2017 przez svyatogor92 Użytkownik (670 p.)
Ach, pie***le to dziadostwo...

W każdym razie dzięki za pomoc
0 głosów
odpowiedź 19 lutego 2017 przez CzikaCarry Szeryf (75,340 p.)
Możesz stworzyć funkcję - generator przy użyciu yield

 https://developer.mozilla.org/pl/docs/Web/JavaScript/Reference/Operators/yield
0 głosów
odpowiedź 9 maja 2022 przez kolusnk Początkujący (310 p.)
function sumArray(arr1, arr2) {
  let arr3 = [];
  for (var i = 0; i < Math.max(arr1.length, arr2.length); i++) {
    arr3.push(arr1[i] + arr2[i]);
    if (arr1.length > arr2.length) {
      arr1.pop();
    }
    if (arr2.length > arr1.length) {
      arr2.pop();
    }
  }
  return arr3;
}

console.log(sumArray([1, 2, 3], [1, 2, 3, 4]));

Wydaje mi się, że to może być rozwiązanie na Twój problem ;) pozdrawiam bootcampu CodersLabu hehe 

komentarz 10 maja 2022 przez VBService Ekspert (253,120 p.)

"Odkopałeś" wpis, smiley

druga sprawa Twój kod nie "robi"  

Jeżeli, tablice nie są równe, elementy nadmiarowe są przepisywane do nowej tablicy.

1
komentarz 10 maja 2022 przez kolusnk Początkujący (310 p.)

No wiem, że odkopałem, ale co w związku z tym ? Szukałem rozwiązania tego problemu i natrafiłem na ten post z przed pięciu lat. Mi udało się znaleźć rozwiązanie, więc je udostępniłem jakby ktoś jeszcze miał podobne dylematy wink a tutaj masz kod który już "coś robi" : 

function sumArray(arr1, arr2) {
  let arr3 = [];
  for (let i = 0; i < Math.max(arr1.length, arr2.length); i++) {
    arr3.push((arr1[i] || 0) + (arr2[i] || 0));
  }
  return arr3;
}

console.log(sumArray([1, 2, 3], [1, 2, 3, 4]));

 

Podobne pytania

0 głosów
1 odpowiedź 1,395 wizyt
pytanie zadane 23 maja 2016 w C i C++ przez chacken Użytkownik (820 p.)

92,555 zapytań

141,403 odpowiedzi

319,560 komentarzy

61,942 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...