我有一个对象数组,像这样:
myArray: [{
name: "First",
price: 10,
rebate: 5,
listPrice: 15,
outcome: 0
},{
name: "Second",
price: 11,
rebate: 5,
listPrice: 16,
outcome: 0
}
只要同一个对象中的任何其他值发生更改,我都希望重新计算outcome
值。
我已经有了这样的设置,但是它会查找任何对象中的更改,然后重新计算整个数组。我已经通过结合使用computed
和watch
函数来进行设置。但是,他们会监视整个数组的更改,然后重新计算数组中所有对象的结果值。
如何查看更改,然后仅重新计算更改的对象?
下面是我当前用于重新计算整个数组(监视另一个属性)的函数,但是我要查找的内容可能完全不同。
计算:
myArrayWasChanged() {
return [this.myArray.reduce((a, {vendors}) => a + vendors, 0), this.myArray.filter(item => item.discounted == false).length]
观看:
myArrayWasChanged: {
handler: function (val, oldVal) {
this.recalculateIsVendor();
答案 0 :(得分:1)
鉴于outcome
完全依赖于其他属性,因此它实际上并不是组件状态的一部分。因此,可以在组件的data
中存储不带outcome
的数组,然后使用结果作为计算属性来计算数组的新版本。
data: function () {
return {
myArrayWithoutOutcome: [
{
name: "First",
price: 10,
rebate: 5,
listPrice: 15
},
{
name: "Second",
price: 11,
rebate: 5,
listPrice: 16
}]
}
},
computed: {
myArrayWithOutcome: function () {
return this.myArrayWithoutOutcome.map(x => {
return {...x, outcome: this.calculateOutcome(x)}
})
}
},
methods: {
calculateOutcome(item) {
// Logic to calculate outcome from item goes here
return 0
}
}