Есть ли способ суммировать все элементы подмассива, а затем умножить все подмассивы, используя «for» или «for-of» l oop? - PullRequest
1 голос
/ 07 мая 2020

Я хочу создать функцию, используя for () или for of () l oop, которая принимает вложенный массив в качестве аргумента, а затем добавляет и умножает его элемент. Предположим, myArray = [[5,6], [9,2], [4,8]] Теперь я хочу обработать его так: [[5 + 6] * [9 + 2] * [4 + 8]] Я решаю это с помощью .map () и .reduce (), но есть ли способ сделать то же самое с помощью classi c for () или for of () l oop. это мое испытание.

let myArray = [[1,2],[3,4],[5,6]]

function multyPlus(array) {
    resul = 0
    for (const subArray of array) {
        for (const num of subArray) {
            resul += num
        }
        resul *= subArray
    }
return resul
}

console.log(multyPlus(myArray));
//Nan

Ответы [ 3 ]

2 голосов
/ 07 мая 2020

Я бы попробовал двухступенчатую систему, которая сначала складывает числа, а затем умножает их на предыдущие числа:

function sum(array) {
    var total = 0;
    for (var item of array)
        total += item;
    return total;
}

var myArray = [[5,6],[9,2],[4,8]];

var output = 1;
for (var item of myArray)
    output *= sum(item);
1 голос
/ 07 мая 2020

Может быть так:

let myArray = [[1,2],[3,4],[5,6]]

function multyPlus(_array){
	var out = 1;
	for(var key1 in _array){
		var out2 = 0;
		for(var key2 in _array[key1]){
			out2 += _array[key1][key2];
		}
		out = out * out2;
	}
	return out;
}
console.log(multyPlus(myArray));
1 голос
/ 07 мая 2020

Вы можете определить отдельные функции adder и multiplier -

const adder = (nums = []) =>
{ let r = 0
  for (const n of nums)
    r += n
  return r
}

const multiplier = (nums = []) =>
{ let r = 1
  for (const n of nums)
    r *= n
  return r
}

const myCalc = (input = []) =>
{ const r = []

  for (const x of input)
    r.push(adder(x))

  return multiplier(r)
}

const result =
  myCalc([[1,2],[3,4],[5,6]])
  
console.log(result) // 231

Тем не менее, я думаю, что функциональный подход лучше, когда вы используете именованные функции. Каждую функцию можно многократно использовать, и багам практически некуда прятаться -

const add = (x = 0, y = 0) =>
  x + y

const mult = (x = 0, y = 0) =>
  x * y

const sum = (nums = []) =>
  nums.reduce(add, 0)

const product = (nums = []) =>
  nums.reduce(mult, 1)

const myCalc = (input = []) =>
  product(input.map(sum)) // <-- easy peasy!
  
const result =
  myCalc([[1,2],[3,4],[5,6]])
  
console.log(result) // 231

Если у вас есть что-то против map и reduce, вы можете написать myCalc и sum вручную, используя простую рекурсию -

const sum = ([ x, ...more ]) =>
  x === undefined
    ? 0
    : x + sum(more)

const myCalc = ([ x, ...more ]) =>
  x === undefined
    ? 1
    : sum(x) * myCalc(more)
  
const result =
  myCalc([[1,2],[3,4],[5,6]])
  
console.log(result) // 231
...