Javascript: редактировать переменную после сопоставления массива - PullRequest
0 голосов
/ 28 июня 2018

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

У меня есть массив всех лучших пирогов, каждый со своей ценой:

[blueberry, strawberry, pumpkin, apple]

Я хочу, чтобы общая сумма продолжала складываться в зависимости от цены с использованием оператора if, что-то вроде:

    var total = 0
    arr.map(pie => {
    if (pie==="blueberry") {
    total = total + 2.5;}
    else if (pie === "apple") {
    total = total + 2}}

Дело в том, что общая сумма возрастает до 2,5, но затем возвращается к 0. Поэтому вместо 4,5 для этого примера я получаю 2, потому что яблоко было последним добавленным пирогом. (

Почему это происходит, и как я могу сделать так, чтобы итог сохранялся и продолжал добавлять другие пироги?

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

Как упоминал Иссак, обычно считается плохим тоном использовать map для побочных эффектов (например, для обновления аккумулятора). Тем не менее, ваш пример должен работать так, как указано: см. Фрагмент ниже.

let arr = ['blueberry', 'strawberry', 'pumpkin', 'apple']
var total = 0

arr.map(pie => {
  if (pie==="blueberry") {
    total = total + 2.5;}
  else if (pie === "apple") {
    total = total + 2}
})

console.log(total)
0 голосов
/ 28 июня 2018

Ваш пример все еще выводит 4.5. Но вы должны взглянуть об API из javascript и понять его простое значение.

Здесь map - это функция, которая поможет вам сделать еще один array из текущего array. В этом случае вы можете сохранить свой код, но просто измените .map() на .forEach().

var arr = ['blueberry', 'strawberry', 'pumpkin', 'apple']
var totalMap = 0;
var totalForeach = 0;
arr.map(pie=>{
    if (pie === "blueberry") {
        totalMap = totalMap + 2.5;
    } else if (pie === "apple") {
        totalMap = totalMap + 2;
    }
});
arr.forEach(pie=>{
    if (pie === "blueberry") {
        totalForeach = totalForeach + 2.5;
    } else if (pie === "apple") {
        totalForeach = totalForeach + 2;
    }
});
console.log('map total:',totalMap);
console.log('forEach total:', totalForeach);
0 голосов
/ 28 июня 2018

let arr = ['blueberry', 'strawberry', 'pumpkin', 'apple']
var total = 0

arr.forEach(pie => {
    if (pie==="blueberry") {
    	total += 2.5;
    }
    else if (pie === "apple") {
    	total += 2
    }
});

console.log(total)

Вместо применения map, попробуйте использовать forEach вместо.

Простое объяснение приведено ниже:

forEach () - выполняет предоставленную функцию один раз для каждого элемента массива.

map () - создает новый массив с результатами вызова предоставленной функции для каждого элемента в вызывающем массиве.

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