Функция сплайсинга на массиве объектов - PullRequest
2 голосов
/ 30 мая 2019

Я выполняю упражнение «Реакция / 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.log(hand1);
    console.log(hand2);

    return (
      <div className="Pokegame">
        <h1>Pokegame!</h1>
      </div>
    );
  }
}

export default Pokegame;

Я понимаю (поправьте меня, если я ошибаюсь), что функция splice() может принимать 2 или более аргументов: первый - это индекс, указывающий, какую позицию добавлять / удалять элементы, второй - количество элементов. добавить / удалить, а следующие аргументы - это элементы, которые мы хотим добавить (но я здесь не использую его, поскольку хочу только удалить выбранный элемент и добавить его в свои руки).

Теперь в этом случае у меня возникают проблемы с пониманием того, как это [0] работает или почему оно здесь ...

Ответы [ 5 ]

0 голосов
/ 30 мая 2019

Array.splice () дает вам новый объединенный массив.Несмотря на то, что в массиве есть только одно значение, это все же массив, поэтому для доступа к переменной вы должны использовать [0].

0 голосов
/ 30 мая 2019

Согласно MDN возвращаемое значение splice() является массивом, состоящим из удаленных элементов из массива.

Возвращаемое значение

Массив, содержащий удаленные элементы. Если удаляется только один элемент, возвращается массив из одного элемента. Если элементы не удалены, возвращается пустой массив

Это просто способ получить удаленный элемент массива. hand2.splice(randIndex, 1) вернет удаленные элементы из массива. Таким образом, в этом случае есть только 1 элемент, поэтому [0] получит этот первый элемент.

0 голосов
/ 30 мая 2019

Если вы посмотрите на ссылку на соединение , вы увидите, что она на самом деле возвращает массив элементов, которые были удалены с помощью операции.

Таким образом, в этом случае он удалит одного покемона из массива hand2 по случайному индексу и вернет массив с одним элементом.

[0] убирает этот элемент из массива и помещает его в переменную randPokemon.

0 голосов
/ 30 мая 2019

Поскольку splice всегда возвращает массив - [0] извлекает первый (и единственный) элемент.Вы можете использовать деструктуризацию для достижения той же цели:

let [randPokemon] = hand2.splice(randIndex, 1);
0 голосов
/ 30 мая 2019

Метод splice добавляет или удаляет элементы из массива.Он также всегда возвращает объект-массив, поэтому [0] должен получить доступ к первому элементу в этом массиве, созданному / измененному с помощью splice.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...