Я выполняю упражнение по реакции/javascript, и у меня возникли проблемы с пониманием использования splice()
в нем.
У меня 8 карт, и мне нужно случайным образом раздать 4 карты 2 игрокам. Теперь все работает нормально, но я не понимаю [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.info(hand1);
console.info(hand2);
return (
<div className = "Pokegame">
<h1>Pokegame!</h1>
</div>
);
}
}
export default Pokegame;
Я понимаю (поправьте меня, если я ошибаюсь), что функция splice()
может принимать 2 или более аргументов: первый — это индекс, указывающий, в какую позицию добавлять/удалять элементы, второй — количество элементов, которые нужно добавить/удалить, а следующие аргументы — это элементы, которые мы хотим добавить (но я не использую их здесь, так как я хочу только удалить выбранный элемент и добавить его в первую руку).
Теперь, в этом случае, мне трудно понять, как это [0]
работает или почему оно здесь...
@JackBashford Могу я узнать причину редактирования тегов?
splice
-метод добавляет или удаляет элементы из массива. Он также всегда возвращает объект-массив, поэтому [0]
должен получить доступ к первому элементу в этом массиве, созданном/измененном склеиванием.
Если вы посмотрите на ссылка на соединение, вы увидите, что он на самом деле возвращает массив элементов, которые были удалены операцией.
Таким образом, в этом случае он удалит одного покемона из массива hand2
по случайному индексу и вернет массив с одним элементом.
[0]
удаляет этот элемент из массива и помещает его в переменную randPokemon
.
Поскольку splice
всегда возвращает массив — [0]
извлекает первый (и единственный) элемент. Вы можете использовать деструктурирование для достижения той же цели:
let [randPokemon] = hand2.splice(randIndex, 1);
Согласно МДН возвращаемое значение splice()
представляет собой массив, состоящий из удаленных элементов из массива.
Return Value
An array containing the deleted elements. If only one element is removed, an array of one element is returned. If no elements are removed, an empty array is returned
Это просто способ получить удаленный элемент массива. hand2.splice(randIndex, 1)
вернет удаленные элементы из массива. Итак, в этом случае есть только 1 элемент, поэтому [0]
получит этот первый элемент.
Большое спасибо за ответы!
Array.splice() дает вам новый объединенный массив. Несмотря на то, что в массиве только одно значение, это все равно массив, поэтому для доступа к переменной вы должны использовать [0].
Это потому, что splice возвращает массив, а вам нужен первый элемент. Вот почему [0].