назначьте переменную в цикле for

#javascript #arrays #for-loop #methods

Вопрос:

Я пытаюсь назначить элемент с наименьшим количеством в новое свойство массива lowestAlph и указать, где хранится следующая итерация -2 , вместо того, чтобы просто выводить наименьшее количество -2 самостоятельно :

[[«n»], [«o», «p»], [«q»], [«r», «s»], -2]

Однако с помощью этого метода выводятся неверные выходные данные. push Не мог бы кто-нибудь, пожалуйста, помочь?

 const example = {
    alph: [
        [["a"], ["b", "c"], ["d"], ["e", "f"], 23],
        [["g"], ["h", "j"], ["k"], ["l", "m"], 19],
        [["n"], ["o", "p"], ["q"], ["r", "s"], -2],
        [["t"], ["u", "w"], ["x"], ["y", "z"], 25]
    ],

    lowestAlph: [],


    calcLow: function () {
        let lowest = this.alph[0][4];
        for (let i = 0; i < this.alph.length; i  ) {
            for (let n = i   1; n < this.alph.length; n  ) {
                if (this.alph[n][4] < lowest)
                    lowest = this.alph[n][4]
            }
                //this.lowestAlph.push(this.alph[i])
        }
        return lowest;
    }
}

console.log(example.calcLow()); 

Ответ №1:

Он вернет ожидаемый результат, если правильно указано ниже:

  1. удалите вложенный цикл (один for цикл может найти наименьшее значение, потому что ваша цель-не сортировать alph )
  2. если найдено меньшее значение, использует = оператор вместо Array.push , потому что он будет продолжать добавлять новое значение в ваше lowestAlph , если будет найдено меньшее значение
  3. возвращение this.lowestAlph вместо lowest
 const example = {
    alph: [
        [["a"], ["b", "c"], ["d"], ["e", "f"], 23],
        [["g"], ["h", "j"], ["k"], ["l", "m"], 19],
        [["n"], ["o", "p"], ["q"], ["r", "s"], -2],
        [["t"], ["u", "w"], ["x"], ["y", "z"], 25]
    ],

    lowestAlph: [],


    calcLow: function () {
        let lowest = this.alph[0][4];
        for (let i = 0; i < this.alph.length; i  ) {
            // for (let n = i   1; n < this.alph.length; n  ) { // remove this for-loop
                if (this.alph[i][4] < lowest)
                    this.lowestAlph = this.alph[i] // assign with the array instead of Array.push
            // }
                //this.lowestAlph.push(this.alph[i])
        }
        return this.lowestAlph; // return this.lowestAlph instead of lowest
    }
}

console.log(example.calcLow()); 

Ответ №2:

В настоящее время вы извлекаете только последний элемент в массиве this.alph[n][4] и присваиваете его lowest переменной.

Вместо этого вы должны назначить весь массив для lowest использования this.alph[n] , а затем извлечь последний элемент при выполнении сравнения.

См.Пример ниже.

 const example = {
    alph: [
        [["a"], ["b", "c"], ["d"], ["e", "f"], 23],
        [["g"], ["h", "j"], ["k"], ["l", "m"], 19],
        [["n"], ["o", "p"], ["q"], ["r", "s"], -2],
        [["t"], ["u", "w"], ["x"], ["y", "z"], 25]
    ],

    lowestAlph: [],


    calcLow: function () {
        let lowest = this.alph[0];
        for (let i = 0; i < this.alph.length; i  ) {
            for (let n = i   1; n < this.alph.length; n  ) {
                if (this.alph[n][4] < lowest[4])
                    lowest = this.alph[n]
            }
        }
        return lowest;
    }
}

console.log(example.calcLow()); 

Ответ №3:

Простым решением было бы клонировать и сортировать массив по значениям 4-го индекса и возвращать наименьшее значение. Например

 const alpha = [
  [["a"], ["b", "c"], ["d"], ["e", "f"], 23],
  [["g"], ["h", "j"], ["k"], ["l", "m"], 19],
  [["n"], ["o", "p"], ["q"], ["r", "s"], -2],
  [["t"], ["u", "w"], ["x"], ["y", "z"], 25]
]

const sorted = [...alpha].sort((a, b) => b[4] - a[4])
console.log(JSON.stringify(sorted.pop())) 

Ответ №4:

Вы можете использовать оператор распространения

 const example = {
    alph: [
        [["a"], ["b", "c"], ["d"], ["e", "f"], 23],
        [["g"], ["h", "j"], ["k"], ["l", "m"], 19],
        [["n"], ["o", "p"], ["q"], ["r", "s"], -2],
        [["t"], ["u", "w"], ["x"], ["y", "z"], 25]
    ],

    lowestAlph: [],


    calcLow: function () {
        let lowest = this.alph[0][4];
        for (let i = 0; i < this.alph.length; i  ) {
            for (let n = i   1; n < this.alph.length; n  ) {
                if (this.alph[n][4] < lowest)
                    lowest = this.alph[n][4]
            }
           this.alph[i].includes(lowest) ?
                this.lowestAlph = [...this.alph[i]] : null
        }
        return this.lowestAlph
    }
    
}

console.log(example.calcLow());