gpt4 book ai didi

javascript - 函数参数在循环内不起作用

转载 作者:行者123 更新时间:2023-12-03 01:11:57 26 4
gpt4 key购买 nike

我正在使用 Vue js 和 Firebase 作为应用程序。我创建一个函数来检索每月费用。

totalExpenseByType(){
db.collection('expenses').where("created_month", "==", moment().format('MM-YYYY'))

.get()
.then(snapshot => {
var totalExpensesOfThisMonth = 0;
snapshot.forEach(doc => {
totalExpensesOfThisMonth += Number(doc.data().expense_amount)
})
this.expenses_of_this_month = totalExpensesOfThisMonth;

})
return this.expenses_of_this_month;
}

这非常有效。

但是我添加了一个参数where条件。它的行为很奇怪。它返回重复所有数据的不可停止的循环。

  totalExpenseByType(expense_type){
db.collection('expenses').where("created_month", "==", moment().format('MM-YYYY'))
.where("expense_type", "==", {"expense_type": expense_type})
.get()
.then(snapshot => {
var totalExpensesOfThisMonth = 0;
snapshot.forEach(doc => {
totalExpensesOfThisMonth += Number(doc.data().expense_amount)
})
this.expenses_of_this_month = totalExpensesOfThisMonth;

})
return this.expenses_of_this_month;
}

这是我用于显示数据的代码

  <template slot="items" slot-scope="props">
<td class="text-xs-left">{{ props.item.expense_type }}</td>
<td class="text-xs-left">{{ totalExpenseByType(props.item.expense_type) }}</td>
<v-btn fab dark small color="pink" @click="removeExepenseType(props.item.id)">
<v-icon dark>remove</v-icon>
</v-btn>
</template>

数据结构

created_month: "09-2018"
expense_amount: "600"
expense_title:"Employee Salary"
expense_type:"Employee Expense"
timestamp:1536126964353

最佳答案

根据有关数据结构的最新更新进行更新...:

按照我最初的建议进行操作:

totalExpenseByType(expense_type){
db.collection('expenses')
.where("created_month", "==", moment().format('MM-YYYY'))
.where("expense_type", "==", expense_type)
.get()
.....

那么,你还有另一个问题。 get() 方法是异步的并返回一个 Promise,请参阅 here 。通过做

totalExpenseByType(){
db.collection('expenses').where("created_month", "==", moment().format('MM-YYYY'))

.get()
.then(snapshot => {
var totalExpensesOfThisMonth = 0;
snapshot.forEach(doc => {
totalExpensesOfThisMonth += Number(doc.data().expense_amount)
})
this.expenses_of_this_month = totalExpensesOfThisMonth;

})
return this.expenses_of_this_month;
}

您在 promise 解决之前返回了 this.expenses_of_this_month 的值,因此它不会返回正确的值。

此外,我认为您误解了 Vue 的 react 系统:在您的代码中,您(如果我正确地假设 this 是您的 Vue 实例)分配了 totalExpensesOfThisMonth< 的值 到组件的 data 对象的 expenses_of_this_month 属性,并在您的 totalExpenseByType(expense_type) 函数中返回相同的数据 对象属性(错误,见上文)。

<小时/>

根据以下最后一条评论进行更新:是一个值为“expense_type:”Employee Expense”的字符串

既然您提到它是一个值为“expense_type:”Employee Expense”的字符串,您应该执行以下操作:

db.collection("test").where("expense_type", "==", '"expense_type:"Employee Expense"').get().then()

或者,如果要删除外部双引号:

db.collection("test").where("expense_type", "==", 'expense_type:"Employee Expense').get().then()
<小时/>

更新数据结构后进行更新:

如果我理解正确,您将 expense_type 存储为对象。

在这种情况下,您的查询应如下所示:

db.collection('expenses').where("expense_type.expense_type", "==", "Employee Expense").get().then()
<小时/>

之前的答案,将被丢弃

我认为应该是这样的:

totalExpenseByType(expense_type){
db.collection('expenses')
.where("created_month", "==", moment().format('MM-YYYY'))
.where("expense_type", "==", expense_type)
.get()
.....

除非expense_type字段是数组类型。在这种情况下,您应该使用“数组成员资格”语法,请参阅 https://firebase.google.com/docs/firestore/query-data/queries#array_membership

关于javascript - 函数参数在循环内不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52180174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com