【问题标题】:JavaScript array contains elements but length returns 0 [duplicate]JavaScript数组包含元素但长度返回0 [重复]
【发布时间】:2018-12-10 05:45:27
【问题描述】:

我正在创建 2 个给定日期之间的天数组,键的格式应为 DD/MM/YYYY,值应为数字(为每个日期设置价格)

这似乎有效,因为数组包含我给它的值(通过日期选择器),但我不能循环遍历这个数组,可能是因为它的长度返回 0,即使它包含元素

这是控制台日志语句的截图

这是创建数组的代码

  var arrayOfDatesBetween = new Array();
  // daysBetween = integer representing the count of days between the chosen dates
  for (let i = 0; i < daysBetween; i++) {
    // just add one day on each iteration but keep count of the first
    let q = i === 0 ? i : 1;
    let _date = _dateIn.setDate(_dateIn.getDate()+q);
    // lcsgDate() formats the date as I need it: DD/MM/YYYY
    let __date = lcsgDate(_date);
    // getDatePrice() gets the price for the given date by searching into another Array of date:price
    arrayOfDatesBetween[__date] = getDatePrice(__date);
  }
  // result
  console.log(arrayOfDatesBetween);

【问题讨论】:

  • "10/07/2018" 不是整数索引。
  • 如果有键,就不是数组;数组有索引。
  • 考虑将格式改为[{'date':'09/07/2018','price':'44'},{'date':'09/11/2018','price':'45'}],这样更容易遍历
  • @melpomene 所以我可以用一个对象来做吗?对象有键

标签: javascript arrays date


【解决方案1】:

我确认将 arrayOfDatesBetween 从 Array 更改为 Object 解决了这个问题,我现在可以根据需要将非整数作为键,感谢您的评论并为我指明正确的方向

【讨论】:

  • 请不要添加 cmets 作为答案。将 cmets 发布为 cmets,并将附加信息发布为问题的编辑。
  • 这是一个故意的答案,因为它解决了问题,我正在等待 stackoverflow 强加的 2 天,然后才能将其标记为已接受。
【解决方案2】:

let arr = [1,2,3]
arr['someCustomDate'] = 'someCustomData'


console.log(arr) // [1,2,3]
console.log(arr['someCustomDate'])

你的代码基本上和上面一样,你定义了一个数组的属性,而不是把它们推到数组中。

要处理您的情况,您有两种选择:

1:为数组的每个元素创建一个对象并将它们推送到数组中,如下所示:

 var arrayOfDatesBetween = new Array();
 // daysBetween = integer representing the count of days between the chosen dates
 for (let i = 0; i < daysBetween; i++) {
 // just add one day on each iteration but keep count of the first
   let q = i === 0 ? i : 1;
   let _date = _dateIn.setDate(_dateIn.getDate()+q);
   // lcsgDate() formats the date as I need it: DD/MM/YYYY
   let __date = lcsgDate(_date);
   // getDatePrice() gets the price for the given date by searching into another Array of date:price

   //HERE <=======
   let newObjectElement = { date: __date, price: getDatePrice(__date)};
   //arrayOfDatesBetween[__date] = getDatePrice(__date);
   arrayOfDatesBetween.push(newObjectElement);
}
// result
console.log(arrayOfDatesBetween);

2:保留您的代码,但使用Object.keys 循环__date

强烈建议选择选项 1,因为这是使用 Array 而不是将元素作为键推送的唯一原因

【讨论】:

    猜你喜欢
    • 2020-08-27
    • 2013-06-05
    • 2023-03-06
    • 2018-12-02
    • 2021-07-03
    • 2020-11-18
    • 2017-08-16
    • 2013-12-10
    • 1970-01-01
    相关资源
    最近更新 更多