我正在做一个react / javascript练习,在理解其中使用splice()
时遇到了一些麻烦。
我有8张牌,我需要向4位玩家随机分配4张牌。现在一切正常,但是我不理解[0]
行末的let randPokemon = hand2.splice(randIndex, 1)[0];
。
这是完整的代码:
import React, { Component } from "react";
import Pokedex from "./Pokedex";
class Pokegame extends Component {
static defaultProps = {
pokemon: [
{ id: 4, name: "Charmander", type: "fire", experience: 62 },
{ id: 7, name: "Squirtle", type: "water", experience: 63 },
{ id: 11, name: "Metapod", type: "bug", experience: 72 },
{ id: 12, name: "Butterfree", type: "flying", experience: 178 },
{ id: 25, name: "Pikachu", type: "electric", experience: 112 },
{ id: 39, name: "Jigglypuff", type: "normal", experience: 95 },
{ id: 94, name: "Gengar", type: "poison", experience: 225 },
{ id: 133, name: "Eevee", type: "normal", experience: 65 }
]
};
render() {
let hand1 = [];
let hand2 = [...this.props.pokemon];
while (hand1.length < hand2.length) {
let randIndex = Math.floor(Math.random() * hand2.length);
let randPokemon = hand2.splice(randIndex, 1)[0];
hand1.push(randPokemon);
}
console.log(hand1);
console.log(hand2);
return (
<div className="Pokegame">
<h1>Pokegame!</h1>
</div>
);
}
}
export default Pokegame;
我了解(如果我错了,请纠正我)splice()
函数可以使用2个或更多参数:第一个是指示添加/删除项目位置的索引,第二个是数字要添加/删除的项目,下一个参数是我们要添加的项目(但是我在这里不使用它,因为我只想删除选定的项目并将其添加到第一手)。
现在,在这种情况下,我很难理解[0]
的工作原理或为什么在这里...
答案 0 :(得分:0)
splice
方法可从数组中添加或删除项目。它还总是返回一个数组对象,因此[0]
将访问由splice创建/修改的数组中的第一个元素。
答案 1 :(得分:0)
如果您查看splice reference,您会发现它实际上返回了该操作删除的一系列项目。
因此,在这种情况下,它将从hand2
数组中的随机索引处删除一个口袋妖怪,并返回一个包含一项的数组。
[0]
将该项目从数组广告中取出,并将其放置在randPokemon
变量中。
答案 2 :(得分:0)
因为splice
总是返回一个数组-[0]
提取第一个(也是唯一的)元素。您可以使用解构来实现相同的目的:
let [randPokemon] = hand2.splice(randIndex, 1);
答案 3 :(得分:0)
根据MDN,splice()
的返回值是一个数组,其中包含从数组中删除的元素。
返回值
包含删除的元素的数组。如果仅删除一个元素,则返回一个元素的数组。如果没有删除任何元素,则返回一个空数组
这只是获取数组中已删除元素的一种方法。 hand2.splice(randIndex, 1)
将返回从数组中删除的元素。因此,在这种情况下,只有1个元素,因此[0]
将获得第一个元素。
答案 4 :(得分:0)
Array.splice()为您提供了新的拼接数组。即使数组中只有一个值,它仍然是一个数组,因此要访问该变量,您可以使用[0]。