angularfire2数组操作(angularfire2 array manipulation)

2019-10-28 13:49发布

请告诉我正确的方式来处理的火力点阵列? 我想点击一个按钮,当数组或数字中切换的值。 所以每个数只存在一次,说按钮12被点击,则12被添加到火力阵列,如果再次点击那么它的去除。

这是我的代码,但是,它并没有拼接,数量再次添加每次。

blockTime(time: number) {
const idx = _.indexOf(this.times, time);
if (idx >= 0) {
     this.times.splice(idx, 1);
   } else {

  this.times.push(time);
   }
}

Answer 1:

当你试图在一个阵列切换的值,重新考虑你的数据结构。 每当你做array.contains(...)array.indexOf(...)你可能应该使用一组类似的数据结构。

由于JavaScript的/ JSON没有真正集,通常(在火力地堡至少)通过使用对象与模仿他们true价值和你的设置项为按键。 然后,突然间,你的操作变得会更加清晰:

blockTime(time: number) {
  if (!this.times[time]) {
    this.times[time] = true;
  }
  else {
    delete this.times[time];
  }
}

或者,如果你没事在保持非阻断时间带与一个false值:

blockTime(time: number) {
  this.times[time] = !(this.times[time] || false);
}

需要注意的是存储这种类型的火力地堡的数据时,最好以确保您的键是字符串,以避免火力地堡的SDK的阵列胁迫。 你可以简单地通过一个字符串,如前缀键做到这一点

blockTime(time: number) {
  var key = "time"+number;
  if (!this.times[key]) {
    this.times[key] = true;
  }
  else {
    delete this.times[key];
  }
}


文章来源: angularfire2 array manipulation