我正在为项目数组构建装饰器,如果对象数组适合那么对象数组将被插入到定义的值范围内。
目前,我正在使用一些条件来检查范围,但代码对我来说感觉不够干净。
有没有人对如何以更简洁和可扩展的方式编写此代码有任何建议?
当前设置示例......
thingsToSort.forEach(function(thing) {
if (thing > 1 || thing < 3) {
// set the item to 1
}
if (thing > 3 || thing < 5) {
// set to 3
}
})
注意:我真的在寻找一种更好的方法来循环这个逻辑并确定对象是否落在范围内。
答案 0 :(得分:2)
另一种实施方式。
Range
setcompareRange
请注意函数some
中compareRange
方法的用法。由于只能在一个范围内找到一个数字,因此不会评估所有范围,直到完成匹配的范围遍历。
function Range(min, max){
this.min = min;
this.max = max;
}
var rangeArray = [ new Range(1,3), new Range(3,5)];
function compareRange(c,i,arr){
var result = rangeArray.some(x=> {
return setcompareRange(c, x.min, x.max)
});
}
function setcompareRange(thing, min, max){
if (thing > min && thing < max) {
// set the item to 1
console.log("set thing = " + thing + " in range = " + min);
return true;
}
}
var thingsToSort = [2,4];
thingsToSort.forEach(compareRange);
&#13;
答案 1 :(得分:0)
我会先仔细检查你的逻辑......
thingsToSort.forEach(function(thing) {
此条件会将ANYTHING设置为大于1到1,并忽略第二个条件(thing < 3
):
if (thing > 1 || thing < 3) {
// set the item to 1
}
您应该使用&&
运算符来AND
这两个条件:
if (thing > 1 && thing < 3) {
// set the item to 1
}
同样适用于这个条件,它将ANYTHING设置为大于3到3。
if (thing > 3 || thing < 5) { //should be &&
// set to 3
}
})
在满足条件后你也没有打破循环。这意味着即使您已经确定某件事符合第一个条件,您仍然要检查它是否符合其他条件。这浪费了资源。使用else if
来阻止这种情况:
if (thing > 1 && thing < 3) {
// set the item to 1
}
else if (thing > 3 && thing < 5) {
// set to 3
}
除此之外,它已经很干净了。这与经典fizzbuzz问题非常相似,其中有许多可能的重构