Функция объединения массива объектов

Я выполняю упражнение по реакции/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] работает или почему оно здесь...

Это потому, что splice возвращает массив, а вам нужен первый элемент. Вот почему [0].

Cristián Ormazábal 30.05.2019 14:45

@JackBashford Могу я узнать причину редактирования тегов?

Maheer Ali 30.05.2019 14:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
2 269
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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] получит этот первый элемент.

Большое спасибо за ответы!

Perdixo 30.05.2019 17:50

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

Другие вопросы по теме