Javascript:这个阵列拼接的全部目的是什么?

时间:2015-10-01 16:07:04

标签: javascript arrays

我正在浏览Javascript课程及其挑战。关于如何应对这一特定挑战,我不会有任何疑问,但我正在考虑我的代码,以确保我理解所有这些并且遇到了一个问题。

var strength = true;
var fear = false;
var pack = {
  foodPouch: ['carrot', 'mystery meat', 'apple', 42],
  addFood: function(foodItem) {
    this.foodPouch = this.foodPouch || [];
    this.foodPouch.push(foodItem);
  },
  gobbleFood: function(foodItem) {
    return(this.foodPouch.indexOf(foodItem) >= 0) ?
    this.foodPouch.splice(this.foodPouch.indexOf(foodItem), 1)[0] :
    alert('Your pack lacks ' + foodItem);
  },
  feedBird: function(birdFood) {
    for (var i = 0; i < this.foodPouch.length; i++) {
      if (this.foodPouch[i] == birdFood) {
        alert('Feed beggar bird ' + this.foodPouch[i]);
      }
    }
  }
};

pack.feedBird('42');

我的问题是这一行:

return(this.foodPouch.indexOf(foodItem) >= 0) ?
        this.foodPouch.splice(this.foodPouch.indexOf(foodItem), 1)[0] :
        alert('Your pack lacks ' + foodItem);

为什么拼接数组的第一个三元动作以[0]结束,我相信这会使整个动作成为拼接数组的值?我可以看看你是否想要将它声明为某种变量,但似乎主要目的只是将其拼接。是否存在[0]是否重要?

2 个答案:

答案 0 :(得分:1)

splice从数组中删除元素,然后返回包含已删除元素的数组。

在这种情况下,gobbleFood函数正在检查是否存在特定项目(使用indexOf)并正在删除并返回foodPouch中存在的第一个实例。

删除是使用splice完成的,并且由于splice会返回删除的项目数组,即使它只删除了1个项目,因为这是必要的使用[0]作为索引器来获取已移除的单个项目。

答案 1 :(得分:0)

return(this.foodPouch.indexOf(foodItem) >= 0) ?
        this.foodPouch.splice(this.foodPouch.indexOf(foodItem), 1)[0] :
        alert('Your pack lacks ' + foodItem);

这句翻译成英文的说法是:

返回&#34;&#39;返回数组的第0个元素&#39;删除foodItem&#34;如果它存在于那里。或者只是显示一条消息。

或者我可以在JS中以这种方式编写它:

if (this.foodPouch.indexOf(foodItem) >= 0) {
    var removedItems = this.foodPouch.splice(this.foodPouch.indexOf(foodItem), 1);
    return removedItems[0]; 
};
else
    alert('Your pack lacks ' + foodItem);