For ... of l oop, который вызывает имя переменной в строке - PullRequest
2 голосов
/ 06 февраля 2020

Очень плохо знаком с JS и кодом в целом (Менее недели, предположим, что база знаний равна 0), поэтому мое объяснение проблемы будет лишено блеска, но вот краткое изложение.

У меня есть функция, которая принимает значения двух объектов. Массивы и складывают значения вместе. Затем он отправляет эту сумму в новый массив (allinit) и, наконец, сортирует новый массив численно. Мне нужно сохранить их в числовом порядке и применить уникальную строку к каждой переменной.

Используя вторую функцию (забавно) и For ... of l oop Я сгенерировал следующее:

var allinit = [jim,dave,bob]

var fun = (allinit) => {

for (var element of allinit) {
    console.log( element + [the name of the variable] + 'initiative')
}

Используя первую назначенную мной функцию:

var jim = 10  
var Dave =15   
var Bob = 20

Как я могу использовать это для ... функции для печати:

10 Bob Initiative

в настоящее время '10 инициатива '

путем вызова имени переменной, которую представляет элемент 10 ?

Немедленным ответом будет использование массива obj / key. Однако, насколько я знаю, я не могу отсортировать массив obj / key, и он ДОЛЖЕН быть отсортирован численно после вычисления сумм. Мне трудно держать вещи достаточно текучими, чтобы поддерживать правильный порядок, и все же я могу назвать переменные, которые представляет каждое число. Я открыт для предложений или печати моего полного кода (~ 50 строк) для контекста.

РЕДАКТИРОВАТЬ

Вот несколько сокращений моего кода для контекста, имейте в виду, что это много много строки удалены из обоих массивов и функции. Theres, вероятно, около 6 переменных в функции, каждая со своей суммой и .pu sh ()

var R = {
  a:5,
  d:2
};

var B = {
  a:10,
  d:18,
};

var Start = (R,B) => {
  var allinit = [

  ];

  var ai = (R.a + B.a);
  allinit.push(ai);

  var di = (R.d + B.d);
  allinit.push(di);

  allinit.sort((a,b)=>a-b);


  var fun = (allinit) => {

    for (var element of allinit) {
      console.log( elemement+ ** Variable name here** + ' inititive')
      }
  };

  console.log(fun(allinit));

};

Ответы [ 2 ]

2 голосов
/ 06 февраля 2020

Без дополнительного контекста, так как «инициатива» заставляет меня думать о ролевых играх, я собираюсь предположить, что это что-то подобное. Я мог бы быть неосновным здесь, но давайте надеяться, что я не!

Идея здесь заключается в том, что каждый игрок, в настоящее время его имя и ценность инициативы (но расширяемая для большего количества вещей), представлена ​​{} объект, и они находятся в массиве [].

Как вы можете видеть, я сознательно упорядочил их в произвольном порядке, просто чтобы мы могли видеть, как сортировка работает как следует.

var players = [
  {name: "Jim", initiative: 10},
  {name: "Bob", initiative: 20},
  {name: "Dave", initiative: 15},
  {name: "Uthorr the Star-Slayer", initiative: 3},
];

// Declare a callback for sort - named here for clarity.
function sortByInitiative(p1, p2) {
  // Sort into ascending initiative order (switch up `p1` and `p2` for descending).
  return p1.initiative - p2.initiative;
}

// Sort players in place.
players.sort(sortByInitiative);

// Loop over them and print salient information.
players.forEach((player, index) => {
  console.log(`Player ${index + 1} is ${player.name} with initiative ${player.initiative}!`);
});

Выход

Player 1 is Uthorr the Star-Slayer with initiative 3!
Player 2 is Jim with initiative 10!
Player 3 is Dave with initiative 15!
Player 4 is Bob with initiative 20!
1 голос
/ 06 февраля 2020

Не совсем уверен, что я понимаю, к чему вы клоните, но звучит так, как будто вы хотите использовать Object.entries, затем сортировать по числу, а затем справиться с этим.

var jim = 10  
var Dave = 15   
var Bob = 20

console.log(
    Object
        .entries({Bob, jim, Dave})   // [['Bob', 20], ['jim', 10], ['Dave', 15]]
        .sort((a, b) => a[1] - b[1]) // [['jim', 10], ['Dave', 15], ['Bob', 20]]
        .map((v) => `${v[0]} ${v[1]} initiative`)
        .join('\n')
);
...