我正在使用计算属性diameter()
返回以下任一内容:
-随机数(randomise: true
)
-从数组(randomise: false
)中的对象返回的数字。
我确实有一个可行的实现(请参阅文章底部),但想知道为什么更清洁的实现不起作用。对于randomise: false
,diameter()
返回undefined
。为什么?
vars [
{varName: diameter, varValue: 25.8},
{varName: quantity, varValue: 68}
]
computed: {
diameter() {
if (randomise) {
return math.randomInt(100, 1000) //no problems
} else {
console.log(this.populateValue('diameter')) //undefined
return this.populateValue('diameter')
}
}
}
methods: {
populateValue(variableName) {
this.vars.forEach(element => {
if (element.varName === variableName) {
console.log(element.varValue) //25.8
return element.varValue
}
})
}
}
以下实现有效,但是为什么要创建一个任意属性呢?
diameter() {
if (!this.vars || !this.passVars) {
return math.randomInt(100, 1000) / (10 ** math.randomInt(0, 3))
} else {
this.populateValue('diameter')
return this.blah
}
}
populateValue(variableName) {
this.vars.forEach(element => {
if (element.varName === variableName) {
this.blah = element.varValue
}
})
}
答案 0 :(得分:1)
问题是return element.varValue
从forEach
返回,而不是populateValue
。
有多种写法。例如
for (const element of this.vars) {
if (element.varName === variableName) {
return element.varValue
}
}
通过使用for
/ of
循环,没有内部函数,因此return
从您期望的函数中返回。
替代方法包括:
let value = null
this.vars.forEach(element =>
if (element.varName === variableName) {
value = element.varValue
}
})
return value
或:
const match = this.vars.find(element =>
return element.varName === variableName
})
if (match) {
return match.varValue
}