【问题标题】:How to pass an instance of an array to a function如何将数组的实例传递给函数
【发布时间】:2019-07-29 00:37:54
【问题描述】:

我有一个复选框组,我想获取所有选中的项目。我正在尝试将一个数组传递给一个函数,以便我可以获取所有选中的项目,但它不起作用。

checkedCategory: Array<number>;


contains(checkedArr: Array<number>, id: number): boolean {
  if (checkedArr instanceof Array) {
    return checkedArr.indexOf(id) > -1;
  } else if (!!checkedArr) {
    return checkedArr === id;
  }
  return false;
}

private add(checkedArr: Array<number>, id: number) {
  if (!this.contains(checkedArr, id)) {
    console.log('add: ' + checkedArr);
    if (checkedArr instanceof Array) {
      checkedArr.push(id);
    } else {
      checkedArr = [id];
    }
  }
}

private remove(checkedArr: Array<number>, id: number) {
  const index = checkedArr.indexOf(id);
  if (!checkedArr || index < 0) {
    return;
  }
  checkedArr.splice(index, 1);
}

toggleCategory(id: number) {
  if (this.contains(this.checkedCategory, id)) {
    this.remove(this.checkedCategory, id);
  } else {
    this.add(this.checkedCategory, id);
  }
}

我的复选框中有一个(单击)事件,它将调用切换类别

(click)="toggleCategory(category.id)"

然后,当我尝试控制台记录“checkedCategory”时,它是未定义的。

我有 3 个复选框组,我想重用“包含/添加/删除”功能,这就是我想传递数组的原因。

谢谢

【问题讨论】:

  • checkedCategory 分配到哪里?
  • @CertainPerformance 我将它传入包含 ans checkedArr
  • 当然可以,但是它从哪里来的?你从来没有在你发布的代码中定义它(这很可能是为什么,当你尝试记录它时,它是未定义的)
  • @CertainPerformance 不是这个吗?已检查类别:数组;对不起,我是个新手。如果不是这样。我应该怎么做才能拥有 3 个可以存储所选项目的数组。我很困惑。
  • 那只是定义了它的类型,没有==,赋值运算符,需要给变量赋值)

标签: javascript arrays angular typescript parameter-passing


【解决方案1】:

当您调用toggleCategory(20) 时,看看会发生什么,在您的情况下,您会看到您的函数将打印add: undefined。所以你必须调试的第一件事是你的 add 函数。我认为问题在于您的数组未定义。尝试像这样初始化你的空数组let checkedCategory: Array&lt;number&gt; = Array(); 但无论哪种方式,您都需要调试您的添加功能。祝你好运:)

如果您对为什么这是解决方案有任何疑问,请告诉我,如果您有兴趣,我不介意从理论方面分享为什么会发生这种情况。

【讨论】:

  • 太棒了!这个也可以。我将它作为未定义的对象传递,这就是它不推送新项目的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 2022-01-08
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多