#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:
Он вернет ожидаемый результат, если правильно указано ниже:
- удалите вложенный цикл (один
for
цикл может найти наименьшее значение, потому что ваша цель-не сортироватьalph
) - если найдено меньшее значение, использует
=
оператор вместоArray.push
, потому что он будет продолжать добавлять новое значение в вашеlowestAlph
, если будет найдено меньшее значение - возвращение
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());