Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Возведение в куб число и массив числовых значений используя функцию (https://javascript.ru/forum/misc/69727-vozvedenie-v-kub-chislo-i-massiv-chislovykh-znachenijj-ispolzuya-funkciyu.html)

Tanya51 14.07.2017 21:14

Возведение в куб число и массив числовых значений используя функцию
 
Есть такая задача:
Напишите функцию extraCube, которая принимает в качестве параметра или число, или массив числовых значений и возвращает либо куб числа, либо массив кубов, в зависимости от типа входящего параметра (typeof). Для расчета куба числа вместо встроенного метода Math.pow используйте собственную функцию.
console.log( extraCube(2) ); // 8
console.log( extraCube([0, 1, 2, 3]) ); // [0, 1, 8, 27]

как число возвести в куб я разобралась:
function square(x) {
return x*x;
}
function extraCube(x) {
return x*square(x);
}

либо так

function extraCube(x) {
return x*x*x;
}
console.log( extraCube(2) );


а вот с массивом чисел не понятно как это можно сделать. Причем для числа и массива чисел это должна быть одна функция.
Помогите пожалуйста

EmperioAf 14.07.2017 21:19

function toCube(x /* number */) {
    return x*x*x;
}

function extraCube(x /* number | Array<number> */) {
    if(x instanceof Array) return x.map(toCube); // [url]https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/map[/url]
    return toCube(x);
}

Tanya51 14.07.2017 21:23

а можете мне расписать как оно работает?)

Tanya51 14.07.2017 21:43

кажется разобралась
Я правильно понимаю, что функция extraCube нам посчитает массив,а toCube - числа?
И если наши числа это не массив, то сработает return toCube(x);?

j0hnik 14.07.2017 22:45

var extraCube =(x) => x = x===0||+x ? x*x*x : x.map((x) => x*x*x);

рони 14.07.2017 23:10

j0hnik,
Цитата:

Сообщение от Tanya51
принимает в качестве параметра или число, или массив

Цитата:

Сообщение от Tanya51
возвращает либо куб числа, либо массив кубов


Tanya51 14.07.2017 23:29

спасибо

j0hnik 14.07.2017 23:44

Цитата:

Сообщение от рони (Сообщение 458537)
j0hnik,

var extraCube =(x) => x = x==0||+x ? x*x*x : x.map((x) => x*x*x);
console.log(extraCube([2,2]));
console.log(extraCube(2));


рони, да и массив и число можно.

рони 15.07.2017 00:06

Цитата:

Сообщение от j0hnik
+x

так нельзя проверять массив ли это?
поэтому лучше
Цитата:

Сообщение от EmperioAf
if(x instanceof Array)


j0hnik 15.07.2017 01:10

Цитата:

Сообщение от рони (Сообщение 458544)
так нельзя проверять массив ли это?
поэтому лучше

var extraCube =(x) => x = x instanceof Array? x.map((x) => x*x*x):x*x*x;

Рони, для вас! :thanks:

EmperioAf 15.07.2017 01:18

j0hnik,
А зачем так просто?
Тут же надо через регулярки!!!
const extraCube = x => JSON.parse(JSON.stringify(x).replace(/(\d+)/gmi, x=>x**3));

рони 15.07.2017 01:21

EmperioAf,
:)

j0hnik 15.07.2017 01:29

Цитата:

Сообщение от EmperioAf (Сообщение 458546)
j0hnik,
А зачем так просто?
Тут же надо через регулярки!!!
const extraCube = x => JSON.parse(JSON.stringify(x).replace(/(\d+)/gmi, x=>x**3));

Раз надо! делайте через регулярки!

рони 15.07.2017 01:36

j0hnik,
на всякий случай почему нельзя +x
var extraCube =(x) => x = x===0||+x ? x*x*x : x.map((x) => x*x*x);
alert(extraCube([1])[0]);

j0hnik 15.07.2017 02:38

Рони, x!=[1] добавить и будет работать.
Все равно, не обязательно проверять именно на массив, можно и на Number проверить.

Tanya51 15.07.2017 17:10

Цитата:

Сообщение от j0hnik (Сообщение 458545)
var extraCube =(x) => x = x instanceof Array? x.map((x) => x*x*x):x*x*x;

Рони, для вас! :thanks:

я хотела это расписать,но оно почему-то не работает так:
var extraCube =function(x){
  if (x = x instanceof Array){
   x.map((x) => x*x*x);
  }else{
    x*x*x;
  }
}

рони 15.07.2017 17:53

Цитата:

Сообщение от Tanya51
я хотела это расписать

var extraCube =function(x){
  if (x instanceof Array){
  x = x.map((x) => x*x*x);
  }else{
  x =  x*x*x;
  }
  return x
}

смотрите пример EmperioAf, пост №2

Tanya51 15.07.2017 19:41

Цитата:

Сообщение от рони (Сообщение 458573)
var extraCube =function(x){
  if (x instanceof Array){
  x = x.map((x) => x*x*x);
  }else{
  x =  x*x*x;
  }
  return x
}

смотрите пример EmperioAf, пост №2

а как эту часть расписать "x = x.map((x) => x*x*x);" , чтоб работало?)

рони 15.07.2017 20:12

Цитата:

Сообщение от Tanya51
чтоб работало?)

Цитата:

Сообщение от Tanya51
смотрите пример EmperioAf, пост №2

"x = x.map(function(x){return x*x*x});"

Tanya51 15.07.2017 21:25

спасибо


Часовой пояс GMT +3, время: 08:21.