用Javascript将10个循环合二为一

时间:2018-09-18 17:01:14

标签: javascript cycle

这是我的带有周期的代码,我想使其更短(如果可能的话,在一个周期内)。

 function plan(piece) {

        for (i = 0; i < 10; i++) {
            piece.addStep('right');
        }
        for (i = 0; i < 9; i++) {
            piece.addStep('down');
        }
        for (i = 0; i < 8; i++) {
            piece.addStep('left');
        }
        for (i = 0; i < 7; i++) {
            piece.addStep('up');
        }
    }

等...对我<1

我考虑过这种情况,

   function plan(piece) {
     for (i=10; i>1; i--){ 
         piece.addStep('right');
         piece.addStep('down');
         piece.addStep('left');
         piece.addStep('up');
     }

但这是错误的。请帮助!

这是任务(迷宫)的样子

here's look of task(maze)

5 个答案:

答案 0 :(得分:3)

您可以为重复逻辑添加功能:

function addSteps(piece, n) {
    while (n--) {
        piece.addStep(piece);
    }
}

addSteps('right', 10);
addSteps('down', 9);
addSteps('left', 8);
addSteps('up', 7);

答案 1 :(得分:1)

通过引入一些if Checks来简单地组合所有这些内容。

例如:

import React, { Component } from "react";
import Modal from "react-native-modal";

class Modal extends Component {

  render() {
    const { navigate } = this.props.navigation;

    return (
        <Modal
        isVisible={this.props.visible}>
          <Button onPress={() => {navigate('Main')}}>
            >Button</Text>
          </Button>
        </Modal>
    );
  }
}

export default Modal;

答案 2 :(得分:1)

一个选项是:

function plan(piece) {
   ['right', 'down', 'left', 'up'].forEach((dir, ind) => {
      for (let i = 0; i < 10 - ind; i++) {
         piece.addStep(dir);
      }
   });
}

答案 3 :(得分:0)

您可以采用嵌套循环并增加索引以获取正确的方向。

var sequence = ['right', 'down', 'left', 'up'],
     i, j,
     k = 0,
     l = sequence.length;

for (i = 0; i < 10; i++) {
    for (j = i; j < 10; j++) {
        document.getElementById('out').innerHTML += sequence[k] + '\n';
        // or piece.addStep(sequence[k]);
    }
    ++k;
    k %= l;
}
<pre id="out"></pre>

答案 4 :(得分:0)

这无疑是有效的,但您可以使用Array fill,concat和forEach

var steps = [].concat(Array(10).fill("right"), Array(9).fill("down"), Array(8).fill("left"), Array(7).fill("up"))
steps.forEach(dir => piece.addStep(dir));