【发布时间】:2019-12-19 20:01:03
【问题描述】:
我正在使用计算属性来过滤一个值数组,并从数组中只提取一组唯一项。最初我只需要一个变量,但现在我需要用它来提取两个不同的值,并且在创建两个计算属性时无法让它彼此独立工作。
这是我的 Vue HTML 代码:
<div v-for="item in getUniques">
<input :value="item.car" v-model="selectedCars" type="checkbox">
<label> {{item.car}}</label>
</div>
函数如下:
data(){
return {
selectedCars: [],
prefetch: [
{car: "XC90", brand: "Volvo"},
{car: "XC60", brand: "Volvo"},
{car: "XC90", brand: "Volvo"},
{car: "X-Type", brand: "Jaguar"}
]
}
},
computed: {
getUniques(){
return this.prefetch.reduce((seed, current) => {
return Object.assign(seed, {
[current.car]: current
});
}, {});
},
}
// This works perfectly for pulling out the unique values of cars and returns... [XC90,XC60, X-Type]
但是当我尝试创建另一个计算属性来做同样的事情,但只与 brands 一起工作时,一切都会中断并且我无法定义。如何调整这个计算属性,以便过滤掉这个数组中的所有其他唯一值?
我已经尝试了所有方法,但无法解决。提前感谢您的帮助!!
【问题讨论】:
-
所以用
[current.brand]替换[current.car]会给你一个错误? -
如果我独立运行它不会,但是当我尝试在计算的同时运行它们时会引发错误。我知道不建议将逻辑添加到计算属性中,所以我一直在弄清楚从那里去哪里
-
我对为什么会发生这种情况很感兴趣。我不相信
.reduce()对prefetch对象有什么奇怪的地方,但显然当多个计算属性使用同一个对象时它会中断? -
正确。切换到下面@Daniel 推荐的映射函数实际上可以同时运行多个计算属性。我仍然很想知道是否有一种方法可以沿单个计算属性进行流式传输,而不是随着样本数组大小的增长而不得不维护多个单个映射函数
-
计算属性缓存它们的输出。他们根据内容创建依赖关系列表,并且只有在感知依赖关系发生变化时才会重新计算。您可以尝试两件事 - 1)使独特的属性更加明显。这可能有点hacky。 2) 返回一个采用唯一属性名称的函数,在这种情况下,该函数被缓存但每次调用时都能正常工作。这可以更简单地作为方法而不是计算属性来完成。
标签: javascript vue.js