无法弄清楚如何返回正确的数组

问题描述

我遇到了问题,但是找不到最佳解决方案。在这里,我希望能够快速找到可用的露营地。我试图返回一个数组,其中包含所有当前未保留的露营地编号。我以为我已经弄清楚了所有代码,直到我发现我的代码似乎在返回字符串而不是值。

function availableCampsites(campgrounds){
  let result = [];
  for (i = 0; i < campgrounds.length; i++){
    if (campgrounds[i].isReserved = false){//If the campground is available 

    } result = result + campgrounds[i].number
  }
  return result;
  }

这是露营地的物体。我试图从所有未预留的营地返回数字变量。这是我要返回的示例。 [1,5,12,18,23]

let campgrounds = [
  { number: 1,view: 'ocean',partySize: 8,isReserved: false },{ number: 5,partySize: 4,{ number: 12,isReserved: true },{ number: 18,view: 'forest',{ number: 23,isReserved: true }
]

解决方法

现在,您要在此行中将值'isReserved'设置为false:

if (campgrounds[i].isReserved = false){//If the campground is available 

=是一个集合,==是一个测试。试试这个:

if (campgrounds[i].isReserved == false){//If the campground is available 
,

result = result + campgrounds[i].number应该在IF STATEMENT

内部

也请使用== insead of

function availableCampsites(campgrounds){
  let result = [];
  for (i = 0; i < campgrounds.length; i++){
    if (campgrounds[i].isReserved = false){//If the campground is available 
         result = result + campgrounds[i].number
    } 
  }
  return result;
  }
,

您需要使用比较运算符(==)而不是赋值运算符(=)评估条件,然后将该值压入结果数组。

let campgrounds = [
  { number: 1,view: 'ocean',partySize: 8,isReserved: false },{ number: 5,partySize: 4,{ number: 12,isReserved: true },{ number: 18,view: 'forest',{ number: 23,isReserved: true }
]

function availableCampsites(campgrounds){
  let result = [];
  for (i = 0; i < campgrounds.length; i++){
    if (campgrounds[i].isReserved == false){//If the campground is available 
      result.push(campgrounds[i].number);
    } 
  }
  return result;
  }

  console.log(availableCampsites(campgrounds))

,
result = result + campgrounds[i].number

这不是将值添加到数组的正确方法。改用它:

result.push(campgrounds[i].number)

您还使用=运算符,它是一个赋值运算符,而不是比较运算符。

所以您的最终代码变为:

function availableCampsites(campgrounds){
   let result = [];
  for (i = 0; i < campgrounds.length; i++){
     if (campgrounds[i].isReserved == false){//If the campground is available 

      } result.push(campgrounds[i].number);
  }
  return result;
}
,

您可以像这样更加整洁:

function availableCampsites(campgrounds){
  return campgrounds.filter(c => c.isReserved === false)
                    .map(c => c.number);
}

它首先将数组过滤为所需的数组,然后将过滤后的结果映射到其number属性的新数组。

,

我在这里看到的三个问题:

  1. 您没有检查自己认为状况如何-实际上,您没有检查任何内容: if (campgrounds[i].isReserved = false) 此行将camgrounds [i] .isReserved的值设置。要检查是否相等,您需要使用=====(您可以自己查看两者之间的区别,这无关紧要)。

  2. 添加到结果中的行位于函数括号之外。它必须位于符合您条件的{}内(按照上述1进行修复后)

  3. 您不应该使用Java中的+添加到数组。它奇怪地将其字符串化,并将您的+操作数附加到末尾。您想使用数组方法,例如pushhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array result.push(campgrounds[i].number)