Сумма чисел по периметру из массива - PullRequest
0 голосов
/ 12 июля 2020

Мне нужно суммировать числа по периметру этого 2D-массива

const arr = [[1,5,3,4], 
             [4,9,9,7], 
             [3,8,7,4]];

Ответ 79, но я не знаю, как писать функцию.

Ответы [ 3 ]

2 голосов
/ 12 июля 2020

Эта функция вернет все числа периметра в матрице, затем выровняет и просуммирует каждый элемент.

const arr = [[3, 8, 9, 7, 6], [6, 3, 8, 9, 7], [7, 6, 3, 8, 9]];

var snail = function(arr) {
    let output = [];
    output.push(arr[0]);
    output.push(arr[arr.length - 1]);

    for(let item of arr){
        if(item != arr[0] && item != arr[arr.length - 1]){
            output.push(item[0]);
            output.push(item[item.length - 1]);
        }
    }

return output
}

const perimeter = snail(arr).flat(1);
const sum = perimeter.reduce((a, b) => a + b);
console.log(sum);
2 голосов
/ 12 июля 2020

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

const
    array = [[3, 8, 9, 7, 6], [6, 3, 8, 9, 7], [7, 6, 3, 8, 9]],
    perimeter = array.reduce((sum, row, i, a) =>
        row.reduce((s, v, j, b) =>
            s + (i === 0 || j === 0 || i + 1 === a.length || j + 1 === b.length
                ? v
                : 0,
            sum)
        ),
        0
    );

console.log(perimeter);
0 голосов
/ 12 июля 2020
arr.map(ar => ar.reduce((a,b) => a + b, 0)).reduce((a,b) => a + b, 0)
...