Можете ли вы выбрать определенную позицию в массиве из функции? - PullRequest
0 голосов
/ 18 октября 2018

Не уверен, что спросить об этом точно.Но код у меня ниже.То, что я хотел бы сделать, это использовать listPlanets ();в операторе if, чтобы вернуть элемент массива, который пользователь вводит в приглашение.

Любая помощь будет хорошей.

var planets = [
    {planet: 'Mercury', position: '1', orbit_time: '0.24', nat_satellites: '0'},
    {planet: 'Venus', position: '2', orbit_time: '0.62', nat_satellites: '0'},
    {planet: 'Earth', position: '3', orbit_time: '1', nat_satellites: '1'},
    {planet: 'Mars', position: '4', orbit_time: '1.88', nat_satellites: '2'},
    {planet: 'Jupiter', position: '5', orbit_time: '11.86', nat_satellites: '67'},
    {planet: 'Saturn', position: '6', orbit_time: '29.46', nat_satellites: '62'},
    {planet: 'Uranus', position: '7', orbit_time: '84.32', nat_satellites: '27'},
    {planet: 'Neptune', position: '8', orbit_time: '164.79', nat_satellites: '14'}
];

var listPlanets = function () {
    for (var i = 0; i < planets.length; i++) {
        document.write(planets[i].planet + ' is planet #' + planets[i].position + 
            ' from the Sun. Time to complete its orbit is ' + planets[i].orbit_time + ' earth year(s). It has ' + planets[i].nat_satellites + ' natural satellite(s).<br>' );
    }
}

// listPlanets();

var num = window.prompt("Please enter a number between 1 and 8");

if (1 <= num && num <= 8) {
    listPlanets();
} else {
    alert("The value you entered is not within range. Please reload the page and enter a value thatis within 1 and 8, inclusive."); 
    window.location.reload();
}

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

@ dgeare ответ работает, потому что индексы массива соответствуют значениям свойства position.Это также можно сделать, добавив простой оператор if в функцию listPlanets, чтобы проверить совпадение параметра функции и свойства position.

var planets = [
    {planet: 'Mercury', position: '1', orbit_time: '0.24', nat_satellites: '0'},
    {planet: 'Venus', position: '2', orbit_time: '0.62', nat_satellites: '0'},
    {planet: 'Earth', position: '3', orbit_time: '1', nat_satellites: '1'},
    {planet: 'Mars', position: '4', orbit_time: '1.88', nat_satellites: '2'},
    {planet: 'Jupiter', position: '5', orbit_time: '11.86', nat_satellites: '67'},
    {planet: 'Saturn', position: '6', orbit_time: '29.46', nat_satellites: '62'},
    {planet: 'Uranus', position: '7', orbit_time: '84.32', nat_satellites: '27'},
    {planet: 'Neptune', position: '8', orbit_time: '164.79', nat_satellites: '14'}
];

var listPlanets = function (userInput) {
   for (var i = 0; i < planets.length; i++) {
       if (planets[i].position == userInput) {
          document.write(planets[i].planet + ' is planet #' + planets[i].position + 
              ' from the Sun. Time to complete its orbit is ' + planets[i].orbit_time + ' earth year(s). It has ' + planets[i].nat_satellites + ' natural satellite(s).<br>' ); 
       }
   }
}

// listPlanets();

var num = window.prompt("Please enter a number between 1 and 8");

if (1 <= num && num <= 8) {
    listPlanets(num);
} else {
    alert("The value you entered is not within range. Please reload the page and enter a value thatis within 1 and 8, inclusive."); 
    window.location.reload();
}
0 голосов
/ 18 октября 2018

Вы должны передать индекс, введенный в приглашении, в качестве аргумента функции и использовать его для получения данного элемента в массиве:

var planets = [...];

var listPlanets = function (num) {
    var planet = planets[num];

    var thingToWrite = planet.planet + ' is planet #' + planet.position + ' from the Sun. Time to complete its orbit is ' + planet.orbit_time ' +  earth year(s). It has ' + planet.nat_satellites + ' natural satellite(s).<br>'

    document.write(thingToWrite);      
}

var num = window.prompt("Please enter a number between 1 and 8");

if (1 <= num && num <= 8) {
    listPlanets(num);
} else {
    alert("The value you entered is not within range. Please reload the page and enter a value thatis within 1 and 8, inclusive."); 
    window.location.reload();
}

С наилучшими пожеланиями, Ivo

0 голосов
/ 18 октября 2018

Я думаю, вы хотите передать введенное значение в функцию listPlanets в качестве аргумента?

var planets = [
    {planet: 'Mercury', position: '1', orbit_time: '0.24', nat_satellites: '0'},
    {planet: 'Venus', position: '2', orbit_time: '0.62', nat_satellites: '0'},
    {planet: 'Earth', position: '3', orbit_time: '1', nat_satellites: '1'},
    {planet: 'Mars', position: '4', orbit_time: '1.88', nat_satellites: '2'},
    {planet: 'Jupiter', position: '5', orbit_time: '11.86', nat_satellites: '67'},
    {planet: 'Saturn', position: '6', orbit_time: '29.46', nat_satellites: '62'},
    {planet: 'Uranus', position: '7', orbit_time: '84.32', nat_satellites: '27'},
    {planet: 'Neptune', position: '8', orbit_time: '164.79', nat_satellites: '14'}
];

var listPlanets = function (i) { //i is a parameter that will be passed into the function at the time it is called
   i -= 1;//the user entered a value between 1 and 8, but our array indexes are from 0 - 7. decrease input by one
   document.write(planets[i].planet + ' is planet #' + planets[i].position + 
            ' from the Sun. Time to complete its orbit is ' + planets[i].orbit_time + ' earth year(s). It has ' + planets[i].nat_satellites + ' natural satellite(s).<br>' );
    
}

// listPlanets();

var num = window.prompt("Please enter a number between 1 and 8");

if (1 <= num && num <= 8) {
    listPlanets(num); //pass num into listPlanets function as argument
} else {
    alert("The value you entered is not within range. Please reload the page and enter a value thatis within 1 and 8, inclusive."); 
    window.location.reload();
}

В приведенном выше коде я удалил цикл, потому что мы уже знаем выбор пользователя.Нет необходимости выполнять работу по обходу каждого элемента в массиве, потому что мы можем получить к нему доступ напрямую.Так как массивы основаны на 0 в javascript, мы должны учитывать это, уменьшая ввод данных пользователем на 1.

Как указано в некоторых комментариях, вы можете предпочесть отразить ваши данные в DOM, а не в документе..write, который перезапишет существующую страницу и обычно считается плохой практикой.Если бы вместо этого вы делали это в DOM, это могло бы выглядеть примерно так:

var planets = [
    {planet: 'Mercury', position: '1', orbit_time: '0.24', nat_satellites: '0'},
    {planet: 'Venus', position: '2', orbit_time: '0.62', nat_satellites: '0'},
    {planet: 'Earth', position: '3', orbit_time: '1', nat_satellites: '1'},
    {planet: 'Mars', position: '4', orbit_time: '1.88', nat_satellites: '2'},
    {planet: 'Jupiter', position: '5', orbit_time: '11.86', nat_satellites: '67'},
    {planet: 'Saturn', position: '6', orbit_time: '29.46', nat_satellites: '62'},
    {planet: 'Uranus', position: '7', orbit_time: '84.32', nat_satellites: '27'},
    {planet: 'Neptune', position: '8', orbit_time: '164.79', nat_satellites: '14'}
];

var listPlanets = function (i) {
   i -= 1;
   document.getElementById('planet_name').innerHTML = planets[i].planet;
   document.getElementById('planet_info').innerHTML = planets[i].planet + ' is planet #' + planets[i].position + 
            ' from the Sun. Time to complete its orbit is ' + planets[i].orbit_time + ' earth year(s). It has ' + planets[i].nat_satellites + ' natural satellite(s).<br>';
    
}

// listPlanets();


document.getElementById('info_button').addEventListener('click', function(evt){
  var num = document.getElementById('planet_input').value;
  if (1 <= num && num <= 8) {
      listPlanets(num);
  } else {
      alert("The value you entered is not within range. Please reload the page and enter a value thatis within 1 and 8, inclusive."); 

  }
});
Pick a planet between 1 and 8 <input id='planet_input' type='number' /><button id='info_button'>View Info</button>
<h1 id='planet_name'></h1>
<h3 id='planet_info'></h3>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...