For...of 循环调用字符串中的变量名
For...of loop Which Calls the Variable Name in a String
总体上对 JS 和代码非常陌生(不到一周,假设知识库为 0),所以我对问题的解释会缺乏光泽,但这是纲要。
我有一个函数,它接受两个对象的值。将值排列并相加。然后它将那个总和发送到一个新数组 (allinit),最后对新数组进行数字排序。我需要让它们按数字顺序排列,并为每个变量应用一个唯一的字符串。
使用第二个函数(有趣)和 For...of 循环我生成了以下内容:
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
如何使用这个 For...of 函数来打印:
10 Bob Initiative
当前“10 个倡议”
通过调用元素10代表的变量名?
直接的答案是使用 obj/key 数组。但是,据我所知,我无法对 obj/key 数组进行排序,并且必须在计算总和后按数字对其进行排序。我很难让事情足够流畅,保持正确的顺序,同时仍然能够命名每个数字代表的变量。我愿意接受建议或打印我的完整代码(~50 行)以供参考。
编辑
这是我的一些 shorthand 上下文代码,请记住,这从数组和函数中删除了许多行。函数中可能有大约 6 个变量,每个变量都有自己的总和和 .push()
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));
};
不完全确定我理解你的意图,但听起来你想使用 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')
);
没有额外的上下文,因为 "initiative" 让我想到了角色扮演游戏,我假设这是为了类似的东西。我可能在这里偏离了基地,但希望我没有!
这里的想法是每个玩家,目前他们的名字和主动值(但可以扩展更多东西)由一个 {}
对象表示,并且他们在一个 []
数组中。
如您所见,我故意以任意顺序对它们进行排序,这样我们就可以看到排序工作正常进行。
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!
总体上对 JS 和代码非常陌生(不到一周,假设知识库为 0),所以我对问题的解释会缺乏光泽,但这是纲要。
我有一个函数,它接受两个对象的值。将值排列并相加。然后它将那个总和发送到一个新数组 (allinit),最后对新数组进行数字排序。我需要让它们按数字顺序排列,并为每个变量应用一个唯一的字符串。
使用第二个函数(有趣)和 For...of 循环我生成了以下内容:
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
如何使用这个 For...of 函数来打印:
10 Bob Initiative
当前“10 个倡议”
通过调用元素10代表的变量名?
直接的答案是使用 obj/key 数组。但是,据我所知,我无法对 obj/key 数组进行排序,并且必须在计算总和后按数字对其进行排序。我很难让事情足够流畅,保持正确的顺序,同时仍然能够命名每个数字代表的变量。我愿意接受建议或打印我的完整代码(~50 行)以供参考。
编辑
这是我的一些 shorthand 上下文代码,请记住,这从数组和函数中删除了许多行。函数中可能有大约 6 个变量,每个变量都有自己的总和和 .push()
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));
};
不完全确定我理解你的意图,但听起来你想使用 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')
);
没有额外的上下文,因为 "initiative" 让我想到了角色扮演游戏,我假设这是为了类似的东西。我可能在这里偏离了基地,但希望我没有!
这里的想法是每个玩家,目前他们的名字和主动值(但可以扩展更多东西)由一个 {}
对象表示,并且他们在一个 []
数组中。
如您所见,我故意以任意顺序对它们进行排序,这样我们就可以看到排序工作正常进行。
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!