我正在浏览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]是否重要?
答案 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);