为了账号安全,请及时绑定邮箱和手机立即绑定

为什么最小和最大范围方法不返回有效输出

为什么最小和最大范围方法不返回有效输出

慕码人8056858 2022-11-27 16:03:59
我需要一个方法来检查 和 之间的有效-064.000000 to -180.000000范围142.000000 to 180.000000。我拥有的范围对象如下所示:"ranges": {  "range1": {    "min": -180,    "max": -64  },  "range2": {    "min": 142,    "max": 180  }}到目前为止,这是我能够完成的,但似乎无法正常工作:const mustBeInRangeInclusive = ({ userInput, ranges }) => {  let data_num = _.toNumber(userInput);  for (let i = 0; i < ranges.length; i++) {    return result = data_num >= ranges[i][0] && data_num <= ranges[i][1];  }};有人可以帮我完成这个方法来弄清楚我做错了什么吗?预期输出:-63 -> invalid-64: valid181 -> invalid180: valid141 -> invalid142: valid
查看完整描述

2 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

几乎没有编辑,因为问题代码不断变化。


第一个问题——访问对象属性


如果你有一个数组,你可以通过索引访问它的值。


let array = [1, 2, 3];

let firstItem = array[0];

let secondItem = array[1];

如果你有对象,你可以通过他们的名字访问它的属性。


let someObject = { 'name': 'John', 'age': 21 };

let name = someObject.name;

name = someObject['name'];

如果您有对象数组,则可以结合这两种方法。


let arrayOfObjects = [

    { 'name': 'John', 'age': 21 },

    { 'name': 'Sam', 'age': 23 }

]

let firstObjectsName = arrayOfObjects[0].name;

第二个问题 - 在第一次迭代时退出循环您一进入循环就 调用returnstatement 使得无法进入第二次迭代。您可以将每次迭代的结果存储在数组中并在最后返回它。


const mustBeInRangeInclusive = ({ userInput, ranges }) => {

  let results = [];

  let data_num = _.toNumber(userInput);

  for (let i = 0; i < ranges.length; i++) {

    results.push(data_num >= ranges[i].min && data_num <= ranges[i].max);

  }


  return results;

};


查看完整回答
反对 回复 2022-11-27
?
白衣非少年

TA贡献1155条经验 获得超0个赞

这个答案基于 OP 的评论请求filters,如果是一个对象,则不能解决问题。

假设您可以更改定义,使用过滤器数组比使用带有过滤器的对象要容易得多。您可以使用数组every方法来检查每个元素是否符合条件。用于some检查某些(一个或多个)元素是否符合条件。

const userInput = document.getElementById("user-input");


const ranges = [ // <- changed definition to an array

  { "min":  0, "max": 100 },

  { "min": 50, "max": 150 },

];


userInput.addEventListener("change", () => {

  const nr = parseInt(userInput.value, 10);

  

  const coversNr = ({min, max}) => min <= nr && nr <= max;

  

  const withinEveryRange = ranges.every(coversNr);

  const withinSomeRange  = ranges.some(coversNr);

  

  console.log("withinEveryRange //=>", withinEveryRange);

  console.log("withinSomeRange  //=>", withinSomeRange );

});

<input id="user-input" type="number" />


查看完整回答
反对 回复 2022-11-27
  • 2 回答
  • 0 关注
  • 69 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信