将项添加到函数内的对象

时间:2015-06-28 04:13:50

标签: javascript

我是javascript的新手,并且一直在阅读雄辩的javascript。我正在尝试制作一个功能,用于存储商品,价格以及是否有售的条目。我似乎无法复制Eloquent Javascript的作者所做的一些事情。我想将其他参数添加到适当的属性中,但我似乎无法添加到对象属性中。我不知道自己做错了什么。我试着按照作者的代码,但它并没有发生在我身上。

var itemList = [];

function addEntry(item){
  var entry = {item: item, price: [], sale: []};
  for(var i = 0; i < arguments.list; i++){
    if(typeof arguments[i] == boolean)
      entry.sale.push(arguments[i]);
    else
      entry.price.push(arguments[i]);

  };
  console.log(entry);
}
addEntry('couch', '$500', true)

我也尝试改变下面的代码,在每次循环迭代时创建一个新属性,但我也不能这样做。我完全清楚,我很可能会遗漏一些关键代码或犯一个容易犯的错误,但我对此视而不见。请帮帮我。即使代码似乎适合您,请告诉我。

var itemList = [];
function addEntry(item){
  var entry = {item: item};
  for(var i = 0; i < arguments.list; i++){
    if(typeof arguments[i] == boolean)
      entry.sale = arguments[i];
    else
      entry.price arguments[i];

  };
  console.log(entry);
}
addEntry('couch', '$500', true)

3 个答案:

答案 0 :(得分:2)

您的代码中存在一些拼写错误。请参阅更新代码中的以下注释:

var itemList = [];
function addEntry(item){
  var entry = {item: item};
  for(var i = 0; i < arguments.length; i++){ // Use argument.length to specify upper bound of the loop
    if(typeof arguments[i] == 'boolean') // typeof returns a string, so use 'boolean'
      entry.sale = arguments[i];
    else
      entry.price = arguments[i];
  };
  console.log(entry);
  itemList.push(entry); // Have you forgotten to add it to the list?
}
addEntry('couch', '$500', true)

答案 1 :(得分:0)

  1. 参数上没有名为list的方法/属性。使用.length
  2. typeof arguments[i]返回一个字符串,使用== 'boolean'
  3. for运行1..n循环,因为0th参数已被指定为item
  4. Demo

答案 2 :(得分:0)

你必须循环通过参数列表,如下所示。此外,如果您将项目设为数组,则可以容纳多个项目,就像多个价目表一样。所以你可以打电话给

addEntry('couch', '$100', true);
addEntry('couch', '$100', true, 'chair', '$50', false); 


function addEntry(){
    var entry = {item: [], price: [], sale: []};
    for(var i = 0; i < arguments.length; i++){
        if(typeof arguments[i] == 'boolean')
            entry.sale.push(arguments[i]);
        else if (!isNaN(arguments[i].replace('$','')))
        {     
            entry.price.push(arguments[i]);
        }
        else
            entry.item.push(arguments[i]);
  }
  console.log(entry);
}