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

Sumowanie wartości dwóch tabel-funkcja

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+1 głos
632 wizyt
pytanie zadane 25 lutego 2021 w JavaScript przez MarcoPolo Nowicjusz (180 p.)

 

Witam. Nie mogę sobie poradzić z banalną rzeczą. Nie potrafię napisać funkcji, która  doda wartości z jednej tablicy do drugiej tak żeby indeksami się sumowały, a nie grupowały wszystkie razem.Próbowałem "parsem" "joinem" "reducem "i nie działa. Zawsze jest nowa pusta tabela. Rezultat ma być taki jak poniżej. OCzekuje, jakiejś wskazówki/naprowadzenia nie gotowego kodu.

 

function sum(tab1, tab2)
var tab1 = [-5,7,12,8,42,76]; 
var tab2 = [9, 8 ,33, 56,11,-5];
result = 94,15,55,64,53,71];

 

komentarz 25 lutego 2021 przez ScriptyChris Mędrzec (190,190 p.)
Czy te tablice zawsze będą jednakowej długości? Jeśli nie, to jak chcesz traktować nadmiarowe elementy?
komentarz 25 lutego 2021 przez MarcoPolo Nowicjusz (180 p.)
Maja być róznej dlugości. Dodatkowym warunkiem funkcji jest jeśli jesli suma jest parzysta przekaźe sumę jeśli nie to przekaże liczbę parzysta, Ale z tym to wiem jak sobie poradzić

2 odpowiedzi

0 głosów
odpowiedź 26 lutego 2021 przez JAKUBW Nałogowiec (33,470 p.)
wybrane 26 lutego 2021 przez MarcoPolo
 
Najlepsza

Najprościej jest użyć wbudowanej funkcji map

const tab1 = [-5,7,12,8,42,76]; 
const tab2 = [9, 8 ,33, 56,11,-5];

const result = tab1.map((e,i) => e + tab2[i])
// result to [4, 15, 45, 64, 53, 71]

 

komentarz 26 lutego 2021 przez VBService Ekspert (256,320 p.)
edycja 26 lutego 2021 przez VBService

@JAKUBW, Twoja propozycja jest jak najbardziej prawidłowa, ale @MarcoPolo doprecyzował swoje pytanie w komentarzach:

i jak sam widzisz, w tym przypadku, już nie do końca ... wink

//const tab1 = [-5,7,12,8,42,76]; 
//const tab2 = [9, 8 ,33, 56,11,-5];

const tab1 = [-5, 7, 12, 8, 42, 76];
const tab2 = [9, 8, 33, 56, 11, -5, 1, 2];

console.log(tab1);
console.log(tab2);

console.warn(tab1.map((e,i) => e + tab2[i]));

+2 głosów
odpowiedź 25 lutego 2021 przez ScriptyChris Mędrzec (190,190 p.)
edycja 26 lutego 2021 przez ScriptyChris

Na dobrą sprawę można to zrobić zwykłą pętlą:

function sum(tab1, tab2) {
  const summedArray = [];

  for (let i = 0; i < Math.max(...[tab1.length, tab2.length]); i++) {
    summedArray.push(tab1[i] + tab2[i]);
  }

  return summedArray;
}

sum([-5,7,12,8,42,76], [9, 8 ,33, 56,11,-5]); // [4, 15, 45, 64, 53, 71]

P.S. Chyba pomyliłeś się przy wartościach w zmiennej result, bo:

  • -5 + 9 = 4, a nie 94
  • 12 + 33 = 45, a nie 55
komentarz 25 lutego 2021 przez MarcoPolo Nowicjusz (180 p.)
edycja 25 lutego 2021 przez MarcoPolo
problem rozwiązany. Dzięki za pomoc:)
1
komentarz 26 lutego 2021 przez VBService Ekspert (256,320 p.)

@ScriptyChris, chyba  wink

  for (let i = 0; i < Math.max(...[tab1.length, tab2.length]); i++) {
    summedArray.push(tab1[i] + tab2[i]);
  }

 

1
komentarz 26 lutego 2021 przez VBService Ekspert (256,320 p.)
edycja 26 lutego 2021 przez VBService

Moja propozycja zmian w oparciu o kod @ScriptyChris,  wink

Jest

function sum(tab1, tab2) {
  const summedArray = []; 
  for (let i=0; i<Math.max(...[tab1.length, tab2.length]); i++) {
    summedArray.push(tab1[i] + tab2[i]);
  } 
  return summedArray;
}

const tab1 = [-5, 7, 12, 8, 42, 76];
const tab2 = [9, 8, 33, 56, 11, -5, 1, 2];

console.log(tab1, 'len:'+tab1.length);
console.log(tab2, 'len:'+tab2.length);

console.warn('sum: ', sum(tab1, tab2));

na

Array.prototype.resize = function(newSize, defaultValue) {
  return [ ...this, ...Array(Math.max(newSize - this.length, 0)).fill(defaultValue)];
}

function sum(tab1, tab2) {
  const max_length = Math.max(...[tab1.length, tab2.length]);

  tab1 = tab1.resize(max_length, 0);
  tab2 = tab2.resize(max_length, 0);
  
  console.log(''); // do demonstarcji
  console.log(tab1, 'len:'+tab1.length); // do demonstarcji
  console.log(tab2, 'len:'+tab2.length); // do demonstarcji

  const summedArray = []; 
  for (let i=0; i<max_length; i++) {
    summedArray.push(tab1[i] + tab2[i]);
  } 
  return summedArray;
}

const tab1 = [-5, 7, 12, 8, 42, 76];
const tab2 = [9, 8, 33, 56, 11, -5, 1, 2];

console.log(tab1, 'len:'+tab1.length); // do demonstarcji
console.log(tab2, 'len:'+tab2.length); // do demonstarcji

console.warn('sum: ', sum(tab1, tab2));


1
komentarz 26 lutego 2021 przez ScriptyChris Mędrzec (190,190 p.)

@ScriptyChris, chyba  wink

@VBService,

Podobne pytania

0 głosów
1 odpowiedź 2,883 wizyt
0 głosów
1 odpowiedź 461 wizyt
0 głosów
2 odpowiedzi 156 wizyt
pytanie zadane 31 stycznia 2018 w C i C++ przez chucksqll Stary wyjadacz (12,930 p.)

93,186 zapytań

142,200 odpowiedzi

322,009 komentarzy

62,514 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2127p. - dia-Chann
  2. 2092p. - Łukasz Piwowar
  3. 2079p. - Łukasz Eckert
  4. 2037p. - Tomasz Bielak
  5. 2006p. - rucin93
  6. 2005p. - Łukasz Siedlecki
  7. 1964p. - CC PL
  8. 1835p. - Adrian Wieprzkowicz
  9. 1785p. - Michal Drewniak
  10. 1744p. - rafalszastok
  11. 1734p. - Anonim 3619784
  12. 1684p. - Mikbac
  13. 1520p. - Marcin Putra
  14. 1480p. - ssynowiec
  15. 1474p. - Dawid128
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...