在对象数组上拼接功能

时间:2019-05-30 12:41:31

标签: javascript arrays reactjs object ecmascript-6

我正在做一个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]的工作原理或为什么在这里...

5 个答案:

答案 0 :(得分:0)

splice方法可从数组中添加或删除项目。它还总是返回一个数组对象,因此[0]将访问由splice创建/修改的数组中的第一个元素。

答案 1 :(得分:0)

如果您查看splice reference,您会发现它实际上返回了该操作删除的一系列项目。

因此,在这种情况下,它将从hand2数组中的随机索引处删除一个口袋妖怪,并返回一个包含一项的数组。

[0]将该项目从数组广告中取出,并将其放置在randPokemon变量中。

答案 2 :(得分:0)

因为splice总是返回一个数组-[0]提取第一个(也是唯一的)元素。您可以使用解构来实现相同的目的:

let [randPokemon] = hand2.splice(randIndex, 1);

答案 3 :(得分:0)

根据MDNsplice()的返回值是一个数组,其中包含从数组中删除的元素。

  

返回值

     

包含删除的元素的数组。如果仅删除一个元素,则返回一个元素的数组。如果没有删除任何元素,则返回一个空数组

这只是获取数组中已删除元素的一种方法。 hand2.splice(randIndex, 1)将返回从数组中删除的元素。因此,在这种情况下,只有1个元素,因此[0]将获得第一个元素。

答案 4 :(得分:0)

Array.splice()为您提供了新的拼接数组。即使数组中只有一个值,它仍然是一个数组,因此要访问该变量,您可以使用[0]。