Умножение элементов массива на цикл for - PullRequest
0 голосов
/ 27 сентября 2018

Я пытался написать функцию, где цикл for перебирает массив с тремя числами (счетами), умножает каждый элемент массива в зависимости от его значения, а затем возвращает новый массив (подсказки), содержащий умноженные значения.,Я попытался сделать это с помощью цикла for, однако возвращаемый массив содержит только элемент номер 2, а элементы 0 и 1 возвращают пустой.Куда я иду не так?Большое спасибо за вашу помощь!

var bills = [10, 20, 40];

function tipCalc(arr) {
  var tips = [];
  for (i = 0; i < arr.length; i++) {
    if (arr[i] < 10) {
      tips[i] = arr[i] * 0.6;
    } else if (arr[i] > 10 && arr[i] < 20) {
      tips[i] = arr[i] * 0.5;
    } else if (arr[i] > 30) {
      tips[i] = arr[i] * 0.2;
    }
  }
  return tips;
}

console.log(tipCalc(bills)) 

Ответы [ 5 ]

0 голосов
/ 27 сентября 2018

var bills = [10, 20, 40];

function tipCalc(arr) {
  return arr.map(function(v){
  	return v <= 10 ? v * 0.6 : (v > 10 && v <= 20 ? v * 0.5 : v * 0.2);
  });

}

console.log(tipCalc(bills)) 
0 голосов
/ 27 сентября 2018

В вашем коде нет ничего плохого, вы просто пропустили некоторые условия для 10 20

var bills = [10, 20, 40];

function tipCalc(arr) {
var tips = [];
for (i = 0; i < arr.length; i++) {
if (arr[i] < 10) {
  tips[i] = arr[i] * 0.6;
} else if (arr[i] >= 10 && arr[i] <= 20) {
  tips[i] = arr[i] * 0.5;
} else if (arr[i] > 30) {
  tips[i] = arr[i] * 0.2;
}
}
return tips;
}

console.log(tipCalc(bills)) 
0 голосов
/ 27 сентября 2018

ошибка, если вы не обрабатываете условия arr[i] === 10, вы обрабатываете <10 и >10, но не ===10, то же самое с 20

попробуйте

var bills = [10, 20, 40];

function tipCalc(arr) {
  var tips = [];
  for (i = 0; i < arr.length; i++) {
    if (arr[i] <= 10) {
      tips[i] = arr[i] * 0.6;
    } else if (arr[i] > 10 && arr[i] <= 20) {
      tips[i] = arr[i] * 0.5;
    } else if (arr[i] > 30) {
      tips[i] = arr[i] * 0.2;
    }
  }
  return tips;
}

console.log(tipCalc(bills)) 
0 голосов
/ 27 сентября 2018

Вы не рассматриваете случай, когда значение равно 10 или 20

var bills = [10, 20, 40];

function tipCalc(arr) {
  var tips = [];
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] <= 10) { //changed here
      tips[i] = arr[i] * 0.6;
    } else if (arr[i] > 10 && arr[i] <= 20) { //changed here
      tips[i] = arr[i] * 0.5;
    } else if (arr[i] > 30) {
      tips[i] = arr[i] * 0.2;
    }
  }
  return tips;
}

console.log(tipCalc(bills))

Если вы хотите избежать использования переменной if..else и local array, вы можете использовать функцию отображения массива

var bills = [10, 20, 40];

function tipCalc(arr) {
  return arr.map(function(item) {
    let m = 10 >= item ? 0.6 * item : 10 < item && 20 >= item ? 0.5 * item : 30 < item && (0.2 * item);
    return m
  })
}

console.log(tipCalc(bills))
0 голосов
/ 27 сентября 2018

Вы не покрываете все случаи.

if (arr[i] < 10) {
  tips[i] = arr[i] * 0.6;
} else if (arr[i] > 10 && arr[i] < 20) {
  tips[i] = arr[i] * 0.5;
} else if (arr[i] > 30) {
  tips[i] = arr[i] * 0.2;
}

Что, если предмет точно 10?Что, если предмет находится между 20 и 30?Это не будет отражено ни в одном из операторов if, которые вы здесь написали, поэтому, вероятно, вам не хватает некоторых элементов в возвращаемом массиве.

Чтобы увидеть, какой из них вы могли бы написать это:

if (arr[i] < 10) {
  tips[i] = arr[i] * 0.6;
} else if (arr[i] > 10 && arr[i] < 20) {
  tips[i] = arr[i] * 0.5;
} else if (arr[i] > 30) {
  tips[i] = arr[i] * 0.2;
} else {
  console.log('Oops! Unhandled case!', arr[i]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...