Вернуть наибольшее число из вложенных массивов без math.max - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь вернуть наибольшее число из каждого подмассива в новый массив.Я чувствую, что я действительно близко, и я чувствую, что if(temp[j] < x) {continue;} не на своем месте.Что я делаю неправильно?PS Я знаю, что могу, вероятно, просто использовать math.max () и сохранить много кода, но я пытаюсь освоиться с циклами и массивами.

  function largestOfFour(arr) {
  let newArr = [];

  for(let i = 0; i < arr.length; i++) {
    let temp = arr[i];
    let counter = 0;
    for(let j = 0; j < temp.length; j++) {
      let x = 0;
      if(temp[j] > counter) {
      counter = temp[j];
      if(counter > x) {
        x = counter;
        if(temp[j] < x) {
          continue;
        }
      }
      newArr.push(temp[j]);

      }

    }
    console.log(arr[i])
  }
  console.log(newArr);
}

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

Ответы [ 4 ]

0 голосов
/ 13 декабря 2018

Вы также можете просто отсортировать массивы в порядке desc и получить первый элемент:

const largestOfFour = arr => arr.map(x => x.sort((a,b) => b-a)[0])

console.log(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]))
0 голосов
/ 12 декабря 2018

В вашем коде вам нужно получить наибольшее число во внутреннем цикле, а затем нажать на него:

function largestOfFour(arr) {
  let newArr = [];

  for (let i = 0; i < arr.length; i++) {
    let temp = arr[i];
    let res = -Infinity; // initialize the res with lowest number
    for (let j = 0; j < temp.length; j++) {
      if (temp[j] > res) { // if a number is greater than res, assign it to res
        res = temp[j];
      }
    }
    newArr.push(res); // push res to the result arr
  }
  return newArr;
}

const result = largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

console.log(result);

Было бы проще, если бы вы преобразовали максимальную логику во внешнюю функцию:

const getArrayMax = ([first, ...arr]) => {
  let mx = first;
  
  for (const cur of arr)
    if (cur > mx)
      mx = cur;
  
  return mx;
}

function largestOfSubarrays(arr) {
  const newArr = [];

  for (let i = 0; i < arr.length; i++) {
    newArr.push(getArrayMax(arr[i])); // push res to the result arr
  }
  
  return newArr;
}

const result = largestOfSubarrays([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

console.log(result);
0 голосов
/ 12 декабря 2018

@ Ответ Эллиота Б., вероятно, является тем, что вы ищете, как объяснение того, где что-то пошло не так.

Альтернативное решение с использованием Map / Reduce on Array

Решение, взятое отсюда:https://medium.freecodecamp.org/three-ways-to-return-largest-numbers-in-arrays-in-javascript-5d977baa80a1

function largestOfFour(mainArray) {
  return mainArray.map(function (subArray){
    return subArray.reduce(function (previousLargestNumber, currentLargestNumber) {
      return (currentLargestNumber > previousLargestNumber) ? currentLargestNumber : previousLargestNumber;
    }, 0);
  });
}
//largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);


const result = largestOfFour([
  [4, 5, 1, 3],
  [13, 27, 18, 26],
  [32, 35, 37, 39],
  [1000, 1001, 857, 1]
]);

console.log(result);
0 голосов
/ 12 декабря 2018

Ожидаете ли вы вывода [5, 27, 39, 1001]?

Если это так, эти незначительные корректировки вашего внутреннего цикла сделают эту работу:

function largestOfFour(arr) {
    let newArr = [];

    for(let i = 0; i < arr.length; i++) {
        let temp = arr[i];
        let x = 0;
        for(let j = 0; j < temp.length; j++) {

            if(temp[j] > x) {
                x = temp[j];
            }
        }

        newArr.push(x);
        //console.log(arr[i])
    }
    console.log(newArr);
}

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...