我有一个遍历对象数组并返回模板文字的函数,该模板文字获取属性值(名称)以及作为函数方法的属性值(这是.move /它们将执行多少步骤) .move方法使用math.random选择随机步数并返回该值。但是,在某些对象中,将move属性定义为整数,例如1或2,而不是随机数。
是否可以更改我的fitnessTest
函数,使其同时接受.move()
和.move
?
我尝试在while语句中使用if else语句
while (steps <= 20) {
if (typeof arrayObject == function) {
steps += arrayObject[i].move();
turns++;
} else
steps += arrayObject[i].move;
turns++;
返回具有正确定义为整数的.move值的对象,但不返回具有.move()的对象的随机数。
function fitnessTest(arrayObject){
let turnsArray = [];
for (i = 0; i < arrayObject.length; i++){
let steps = 0;
let turns = 0;
while (steps <= 20){
steps += arrayObject[i].move();
turns++;
} turnsArray.push(`${arrayObject[i].name} took ${turns} turns to take 20 steps.` );
} return turnsArray;
}
现在,该函数将遍历具有.move()
作为对象的对象数组,该对象生成随机数并返回正确的字符串,但是将.move设置为整数的对象只会给我一个
arrayObject[i].move
的类型错误不是函数
答案 0 :(得分:0)
1。typeof
返回一个字符串值,您需要与JavaScript类型的字符串进行比较。
2。
您应该测试move
的单个项目的属性arrayObject
是否是一个函数,而不是arrayObject
本身:
typeof arrayObject[i].move == 'function'
答案 1 :(得分:0)
检查typeof
数组元素,但不检查数组变量。
var arr = [ { move: 10}, {move: function () {}} ];
console.log(typeof arr) // object
console.log(typeof arr[0].move) // number
console.log(typeof arr[1].move) // function
将代码更改为:
while (steps <= 20) {
if (typeof arrayObject[i].move === "function") {
steps += arrayObject[i].move();
turns++;
} else if (typeof arrayObject[i].move === "number")
steps += arrayObject[i].move;
turns++
答案 2 :(得分:0)
const utils = eval(environment.utils)();
const text = utils.testPackage.generateRandomText();
const username utils.testPackage.generateUsername();
为您提供了一个字符串,因此您需要使用typeof
将其与字符串等同。还要比较""
属性而不是对象本身。
您可以将三元运算符用于您的目的,并且可以使用更优雅的代码。
move