繁体   English   中英

Javascript-如何查找变量名而不是变量名

[英]Javascript - How can I find the name of a variable instead of the value it holds

我有这个功能来设置画布上的多维数据集的移动(随机), everyVar变量都是将要使用的变量,而a,b,c,d+,-,*,/函数(抱歉,如果令人困惑)。 有没有一种方法可以找到变量的名称而不是变量的值; 我有“ user.s = a(b(c(d(r, 2), e), w), q); ”,我需要一种将其放在重复函数中的方法,以便变量保持不变,但信息会更新,但是如果我将其放到其他地方,它将具有不同的变量。 我不能只设置另一个变量,例如myVariable = q因为它将保存数字而不是变量本身(例如,我需要说user.y而不是300)。 您可能会告诉我,让我的初学者尽可能简单地回答。

function setMovement(user){
    var everyVar = [user.x, user.y, user.direction, user.distance]

    var q = everyVar[Math.floor(Math.random()*everyVar.length)];
    var w = everyVar[Math.floor(Math.random()*everyVar.length)];
    var e = everyVar[Math.floor(Math.random()*everyVar.length)];
    var r = everyVar[Math.floor(Math.random()*everyVar.length)];

    user.s = a(b(c(d(r, 2), e), w), q);

    a = operators[Math.floor(Math.random()*operators.length)]
    b = operators[Math.floor(Math.random()*operators.length)]
    c = operators[Math.floor(Math.random()*operators.length)]
    d = operators[Math.floor(Math.random()*operators.length)]
}

这是您可以使用的一些代码:

 // Define the operators as functions var operators = [ function add(x, y) { return x + y }, function sub(x, y) { return x - y }, function mul(x, y) { return x * y }, function div(x, y) { return x / y } ]; // Don't reference the values, but the property names var everyVar = ['x', 'y', 'direction', 'distance']; function setMovement(user){ var q = everyVar[Math.floor(Math.random()*everyVar.length)]; var w = everyVar[Math.floor(Math.random()*everyVar.length)]; var e = everyVar[Math.floor(Math.random()*everyVar.length)]; var r = everyVar[Math.floor(Math.random()*everyVar.length)]; var a = operators[Math.floor(Math.random()*operators.length)] var b = operators[Math.floor(Math.random()*operators.length)] var c = operators[Math.floor(Math.random()*operators.length)] var d = operators[Math.floor(Math.random()*operators.length)] // Make sa function, so the expression is evaluated with the // current values of the user object properties: user.s = function () { return a(b(c(d(user[r], 2), user[e]), user[w]), user[q]); }; // For debugging, you can use this extra property to see // which expression the "random" function evaluates: user.s.description = `${a.name}(${b.name}(${c.name}(${d.name}` + `(user.${r}, 2), user.${e}), user.${w}), user.${q})`; } // same data var user = { x: 20, y: 10, direction: 1, distance: 5 } // Define "random" function user.s setMovement(user); console.log( 'user.s() evaluates this expression:\\n', user.s.description ); console.log( 'result of user.s():', user.s() ); // Change x and y and display result then: user.x -= 5; user.y += 10; console.log( 'result of user.s():', user.s() ); 

注意:除法时要小心:当第二个参数为0时,会出现运行时错误。

我现在设法弄弄您的代码。 我相信您正在寻找的是Object.keys()

function setMovement(user){
    var everyVar = Object.keys(user);

    var q = everyVar[Math.floor(Math.random()*everyVar.length)];
    var w = everyVar[Math.floor(Math.random()*everyVar.length)];
    var e = everyVar[Math.floor(Math.random()*everyVar.length)];
    var r = everyVar[Math.floor(Math.random()*everyVar.length)];

    user.s = a(b(c(d(r, 2), e), w), q);

    a = operators[Math.floor(Math.random()*operators.length)]
    b = operators[Math.floor(Math.random()*operators.length)]
    c = operators[Math.floor(Math.random()*operators.length)]
    d = operators[Math.floor(Math.random()*operators.length)]
}

现在,您以数组中的字符串的形式获取了用户对象的所有属性,可以使用常规数组索引语法将它们用于赋值:

var user = { x:10, y:20,direction:1,distance:10};
var everyVar = Object.keys(user);
var x = user[everyVar[1]];

将为变量x赋10

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM