• 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

Object Storage Arubacloud
+1 głos
433 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 (253,100 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 (253,100 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 (253,100 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,675 wizyt
0 głosów
1 odpowiedź 393 wizyt
0 głosów
2 odpowiedzi 120 wizyt
pytanie zadane 31 stycznia 2018 w C i C++ przez chucksqll Stary wyjadacz (12,930 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 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!

...