【问题标题】:JavaScript Grocery ListJavaScript 杂货清单
【发布时间】:2015-05-18 05:32:04
【问题描述】:

我正在尝试创建一个购物清单程序。现在,我只是在处理一些基本功能。将一个项目添加到我的购物清单,从购物清单中删除一个项目,查看购物清单,并标记我是否已经拿起了该项目。我坚持如何让“标记”功能正常工作,这是我的代码:

var groceryList = [];

function add_item(item){
    groceryList.push(item);
}

function remove_item(item){
    for (var i = 0; i <= groceryList.length; i++){
        if (groceryList[i] === item) groceryList.splice(i, 1);
    }
}

function view_list(){
    for (var i = 0; i < groceryList.length; i++){
        if (groceryList.length == 0)
        return;
        else
        console.log("- " + groceryList[i]);
    }
}

function mark_item(item){
    for (var i = 0; i <= groceryList.length; i++){
        if (groceryList[i] == item) console.log("X " + groceryList[i]);
    }
}

view_list();
add_item('banana');
add_item('apple');
view_list();
add_item('testies');
view_list();
remove_item('testies');
view_list();
mark_item('apple');

显然,当我运行mark_item 函数时,它只会打印我放入的项目,并在其旁边加上X。我想知道是否有人对我如何解决这个问题有建议?

【问题讨论】:

  • 也许你可以再多一个数组来存储标记的项目。
  • 你可以在我给定的例子中使用二维数组

标签: javascript arrays add-in


【解决方案1】:

您正在从能够将您的项目存储为简单的字符串转变为需要存储有关您的项目的一些上下文数据,即您是否已标记它们。您可以开始将您的项目存储为带有名称和标记标志的 javascript 对象。

function add_item(item){
    groceryList.push({
        name: item, 
        marked: false
    });
}
function view_list(){
    for (var i = 0; i < groceryList.length; i++){
        if (groceryList.length == 0)
        return;
        else
        // let's display marked off items differently 
        if (groceryList[i].marked){
            console.log("X " + groceryList[i].name);
        } else {
            console.log("- " + groceryList[i].name);
        }

    }
}
function mark_item(item){
    for (var i = 0; i <= groceryList.length; i++){
        if (groceryList[i].name == item) {
            // when we mark an item, we just set its flag
            groceryList[i].marked = true;
        }
    }
}

【讨论】:

  • 我真的很喜欢这个解决方案。也完全有道理。我很新,所以这些事情一开始不会想到。在你提到它之后,我在想......'当然,我为什么没有想到这一点!'。无论如何,我已经调整了我的代码,但我仍然收到groceryList[i].name == item 的错误。错误是:TypeError:无法读取未定义的属性“名称”。有任何想法吗?另外,你知道为什么像我这样的问题会被否决吗?我不知道为什么我会得到它们?我做错了吗?
  • 这发生在您的 remove_item 函数中吗?尝试将该拼接调用包装在一组花括号中并添加一个返回;里面也有。找到要删除的项目后,您不需要执行其余的循环,对吧?
  • 不知道为什么你被否决了。投反对票的人应该说明他们这样做的原因。
  • 尝试使用mark_item函数时出现错误。我要再玩一下。 IDK 为什么它无法读取属性名称并且它认为它未定义......它显然在我的列表中。
  • 那个错误是说groceryList[i] 是未定义的。有错别字吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-29
相关资源
最近更新 更多