【发布时间】:2021-08-17 01:39:12
【问题描述】:
下面是两个函数,它们遍历对象集合以评估是否有任何项目对象的 id 等于函数的 id 参数。如果为 true,那么它会设置一个活动标志并将当前变量设置为等于 id。
注意事项:
- 函数 longVersion(id) 如果是详细/更长的方法
- function shortVersion(id) 是我目前的最佳方法
问题
- 在 ES6 和/或 lodash 中是否有更好的方法来实现相同的结果?
const items = {1:{id:1,active:false},2:{id:2,active:false}, 3:{id:3,active:false}}
let current = 0;
function longerVersion(id) {
for (const k in this.items) {
if (this.items[k].id === id) {
this.items[k].active = true
current = id
} else {
this.items[k].active = false
}
}
}
function shorterVersion(id) {
for (const k in this.items) {
items[k].active = items[k].id === id && ((current = id) && true)
}
}
longerVersion(2);
console.log(current); // expected outcome : (current === 2)
console.log(items); // expected outcome : items: {1:{id:1,active:false},2:{id:2,active:true}, 3:{id:3,active:false}}
shorterVersion(3);
console.log(current); // expected outcome : (current === 3)
console.log(items); // expected outcome : items: {1:{id:1,active:false},2:{id:2,active:false}, 3:{id:3,active:true}}
【问题讨论】:
-
将项目切换为数组感觉如何?然后你可以使用 Array.find 和其他有用的函数来代替 for 循环。
-
“更好”怎么样? “最优”在什么意义上?就个人而言,我讨厌将作业与布尔表达式混合在一起,但这就是我的看法,伙计。
-
@HereticMonkey 我同意,但是你最终会得到代码繁重的详细选项
-
@James 顺便说一句,我对数组很好,如果你有解决方案
-
这就是我们有缩小器的原因,所以我们不必担心这样的废话。
标签: javascript ecmascript-6 lodash