【问题标题】:.each length gives undefined.each 长度给出未定义的
【发布时间】:2020-04-02 12:52:57
【问题描述】:

我的if 语句有什么问题? else 有效,但 if 无效。count1 提供 undefined。 if 语句中的术语在其他地方也适用,所以这不是问题。

$.ajax({
  type: 'GET',
  url: '/api/Carts',
  dataType: 'json',
  headers: {
    'Authorization': 'Bearer ' + localStorage.getItem('accessToken')
  },
  success: function(data) {
    $.each(data, function(index, val) {
      if (val.CompanyID == JSON.parse(localStorage.getItem('userName')) && val.IsInCart == true) {
        var count1 = val.length;
        console.log('Shopping cart has ' + count1);
      } else {
        var count = data.length;
        console.log('Shopping cart has ' + count);
      }
    });
  }
})

【问题讨论】:

  • 什么是val?或者data的内容?
  • 您将CompanyID(可能是字符串或整数)与JSON.parse() 的结果进行比较,JSON.parse() 是一个对象或数组...?
  • val 似乎是一个对象,如果是,它不会有length 属性
  • @CalvinNunes 它可能有一个length 属性。不会是数组,而只是对象的普通属性。没有数据,就无法确定这段代码是对还是错。

标签: javascript jquery each


【解决方案1】:

看起来data 包含购物车中的商品?在这种情况下,val 是每个项目。

您需要确保 val 也是一个数组,或者,如果这不切实际,您需要确保它具有一个属性,该属性将您要查找的值存储为 @ 的赋值值987654325@.

我建议只评估data 的长度,因为它包含购物车中的物品(见下文)。这意味着您不需要 else ,除非您想要一条消息说“您的购物车是空的”或其他内容。

无关:我建议你可以让你的代码更简洁一些。

我已经修改了你的代码来清理 if 语句:

$.ajax({
  type: 'GET',
  url: '/api/Carts',
  dataType: 'json',
  headers: {
    'Authorization': 'Bearer ' + localStorage.getItem('accessToken')
  },
  success: function(data) {
    $.each(data, function(index, val) {
      let uname = JSON.parse(localStorage.getItem('userName'));
      if (val.CompanyID == uname && val.IsInCart == true) {
        var count1 = data.length;
        console.log('Shopping cart has ' + count1);
      }
    });
  }
})

HTH

编辑 1

根据您的评论:

.each() 给你一个物品 (val),它不能给你很多物品。因此,由于看起来您正在尝试输出购物车中的商品数量,您可能想要的是这样的:

$.ajax({
  type: 'GET',
  url: '/api/Carts',
  dataType: 'json',
  headers: {
    'Authorization': 'Bearer ' + localStorage.getItem('accessToken')
  },
  success: function(data) {
    // Get number of items.
    let count = data.length;
    console.log('Shopping car thas ' + count);

    // Get details about each item.
    $.each(data, function(index, val) {
      let uname = JSON.parse(localStorage.getItem('userName'));
      if (val.CompanyID == uname && val.IsInCart == true) {
        console.log('This item is a ' + val.Name); // Example.
      }
    });
  }
})

【讨论】:

  • 是的,数据是购物车中的商品。但我只想要那些项目,.each 给出的内容(if 中的条款),而不是所有数据。现在我得到所有数据。在我的示例中,我有用于测试目的的 else 语句。感谢您的清洁,我正在学习这个。
  • 好的,所以我更新了答案。请记住,.each() 允许您访问集合中的每个项目。如果要获取集合中的多个项目,则不要在 .each() 中进行。如果您尝试为该用户获取一些商品或购物车中的商品,则涉及更多逻辑,但这是另一个问题。
  • 是的,这就是问题,如何为该用户获取购物车中的商品数量。我只是不知道会这么难..
  • 这不是你要问的问题。您要问的问题是为什么您的 .each().length 会给出未定义的值。对于您想要做的事情,在.each() 之前创建一个计数器并在.each() 内增加它,这将为您提供用户购物车中的商品数量。 jsfiddle.net/j3rs457v
猜你喜欢
  • 1970-01-01
  • 2017-10-28
  • 2012-10-29
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
相关资源
最近更新 更多