Loading...
Elena123456 avatar Elena123456 235 Точки

09. Aggregate Elements (JS)

Здравейте,

може ли малко помощ за следната задача:

Write a program that performs different operations on an array of elements. Implement the following operations:

  • - calculates the sum all elements from the input array
  • - calculates the sum of the inverse values (1/ai) of all elements from the array
  • - concatenates the string representations of all elements from the array

The input comes as an array of number elements.

The output should be printed on the console on a new line for each of the operation.

 

 

Input

Output

[1, 2, 3]

6

1.8333

123

 

 

Input

Output

[2, 4, 8, 16]

30

0.9375

24816

 

Кода ми е следния, като при мен във VS code получавам само верни първия и последния резултат, но не и втория, който е с инвърснатата стойност, а Judge на всеки ред ми изписва NAN. https://judge.softuni.bg/Contests/Practice/Index/2749#8 (трябва да се събмитне без първото let)

let aggregateElements = (...array=> {

    let numbersArray = array.map(Number);

    let sum = numbersArray.reduce((ab=> a + b);

    let inverseValue = numbersArray.reduce((ab=> 1/a + 1/b);

    let stringConcat = numbersArray.join('');

 

    console.log(sum);

    console.log(inverseValue.toFixed(4));

    console.log(stringConcat);

}

 

aggregateElements(24816);

Тагове:
0
Module: JS Advanced 01/08/2021 23:04:51
svephoto avatar svephoto 1191 Точки
Best Answer

Здравей, Elena123456,

 

Трябва да подадеш входните данни като масив - махаш "..." преди array тук -> (...array) и накрая след функцията подаваш така -> aggregateElements([24816]);. Струва ми се, че правиш нещо друго за

- calculates the sum of the inverse values (1/ai) of all elements from the array

понеже се иска да сумираме inverse values на всички елементи в масива (1 / настоящия елемент) и освен това не трябва да закръгляш до 4-тата цифра след десетичната запетая - махаш .toFixed(4). Ако желаеш, виж този вариант на твоето решение: https://pastebin.com/VrQsEaMT.

2
02/08/2021 11:33:40
Elena123456 avatar Elena123456 235 Точки

@ svephoto , благодаря Ви за примерното решение, което е 100/ 100 в Judge. :)

При мен след като поставя вашия код ми дава следното - "Uncaught TypeError: array.map is not a function 

Process exited with code 1 ".

Ако сложа трите точки ( ...array ) е ок.

Но не разбирам : този код и този защо не дават едни и същи резултати:

 let inverseValue = numbersArray.reduce((ab=> 1/a + 1/b);

  и това:

  • for (let i = 0; i < numbersArray.length; i++) {

        inverseValuesSum += 1 / numbersArray[i];

    }

 

0
02/08/2021 18:59:37
svephoto avatar svephoto 1191 Точки

Получаваш

"Uncaught TypeError: array.map is not a function 

Process exited with code 1".

понеже трябва да подадеш входните данни не като поредица от числа, a като масив, с квадратните скоби, както бях посочил и в първия коментар, ето така -> aggregateElements([24816]); и съответно array да бъде без spread оператора "..." отпред. Така ще проработи коректно, опитай.

1
02/08/2021 21:53:31
Elena123456 avatar Elena123456 235 Точки

Да, сега вече разбрах!

И в Judge, и при мен всичко е точно.

Благодаря за отделеното време!

0
svephoto avatar svephoto 1191 Точки

Моля, няма проблем.

Иначе този вариант за сумиране на inverse стойностите с reduce работи коректно:

let inverseValuesSum = numbersArray.reduce((a, b) => a + 1 / b, 0);

Снощи за по-лесно и бързо ми хрумна първо с един цикъл да ги извъртя и сумирам, но сега като поразцъках и reduce-a, и той също заработи.

Цялото решение: https://pastebin.com/J7pke8bJ.

1
03/08/2021 01:03:03
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.