为什么我在avascript上的数组上没有定义

时间:2017-12-13 20:13:49

标签: javascript

我在一个简单的应用程序中间,想法是随机选择而不重复数组的值。

我设法通过一个功能来完成它,但此刻我开始通过它我有两个未定义,我不知道为什么

代码示例:

  <Button
    android:id="@+id/memories"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginTop="8dp"
    android:text="Memories >"
    app:layout_constraintBottom_toTopOf="@+id/scrollView2"
    app:layout_constraintHorizontal_bias="0.502"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<ScrollView
    android:id="@+id/scrollView2"
    android:layout_width="0dp"
    android:layout_height="450dp"
    android:layout_marginBottom="6dp"
    android:layout_marginEnd="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginStart="8dp"
    android:background="#808000"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent">

    <LinearLayout
        android:id="@+id/SavedBroadcasts"
        android:layout_width="304dp"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        tools:layout_editor_absoluteX="8dp"
        tools:layout_editor_absoluteY="0dp" >

    </LinearLayout>
</ScrollView>

2 个答案:

答案 0 :(得分:1)

您只在开始时设置splice的值,而不是更新它,即使您使用next()从阵列中删除条目也是如此。因此,在几次调用undefined后,您越来越有可能访问现在为totalnum的数组的索引,因为它们已被拼接出来。您需要随时更新<script> var num = [1, 2, 3, 4, 5, 6, 7, 8, 9]; cont = 0; function next() { var indice = Math.floor(Math.random() * (cont < num.length ?++cont:0)); var number = num[indice]; document.getElementById("hola2").innerHTML =num.splice(indice,1); } </script> 的值或直接引用数组长度(我更喜欢使用后者,因为它更简单,更直观,更易读)。

export class calculateRoute extends Component{
  constructor () { 
    super();
    this.state = {showImage: false};
  }

  showImageFunc = () => {
     this.setState({showImage: true});
  }

  render() {
    return (
      <div>
        {this.state.showImage &&
        <View>
          <Image
            style={{width: 50, height: 50}}
            source={require('./Alexa.png')} />
        </View>}
        <Button
          onPress={this.showImageFunc}
          title="Calculate Route"
          color="#841584"
          accessibilityLabel="Button to calculate route" />
      </div>
    );
  }
}

答案 1 :(得分:1)

由于splice()更改了数组的长度,因此每次只使用num的长度来获取随机索引,而不需要其他变量

var num = [1, 2, 3, 4, 5, 6, 7, 8, 9];

function next() {
  if (!num.length) return;// do something when no more exist

  var indice = Math.floor(Math.random() * num.length);
  var number = num.splice(indice, 1);
  document.getElementById("hola2").innerHTML = number;
}

document.getElementById("btn").addEventListener('click', next)
<div id="hola2"></div>
<button id="btn">Next</button>