如何解决如何获取对象的总数组
因此,我要为此项目做的是创建一个函数“ findMyCampsites”,该函数接受三个参数,即营地,视图和partySize。我正在尝试让我的代码接受个人视图偏好“森林”或“海洋”,以及期望的聚会的规模,并返回与用户输入匹配的所有可用露营地的数量。但是,如果没有匹配项,该函数应返回一个空数组。这是到目前为止我能想到的。.无论如何,我不知道为什么要返回[]。我在做什么错了?
> function findMyCampsites(campgrounds,view,partySize){
let result = []
for (i = 0; i < campgrounds.length; i++){
if (campgrounds[i].isReserved === false){
if (campgrounds[i].view === view){
result.push(campgrounds[i].view)
if (campgrounds[i].partySize === partySize){
result.push(campgrounds[i].partySize)
result = result + 1;
}
}
}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 }
]
解决方法
您可以使用kwargs
您可以使用逻辑或运算符.filter()
首先,您检查其是否未被&&
保留。如果满足此条件,则移至下一个条件,否则返回!ground.isReserved
,此当前营地将被过滤掉。
您可以添加更多条件,只需将其与false
链接即可。
对于&&
,我使用了更大的partySize
而不是>=
,因为:
例如,如果某人需要4的尺寸,但例如5的尺寸,则不会向他们显示5。他们可能仍会使用5,即使它的1大小很大。当然,如果您严格要求===
,只需将===
替换为>=
===
,
尝试格式化代码
function findMyCampsites(campgrounds,view,partySize) {
let result = [];
for (i = 0; i < campgrounds.length; i++) {
if (campgrounds[i].isReserved === false) {
if (campgrounds[i].view === view) {
result.push(campgrounds[i].view);
if (campgrounds[i].partySize === partySize) {
result.push(campgrounds[i].partySize);
result = result + 1;
}
}
}
return result; // inside the for loop
}
}
您将return放入for循环内。
循环仅在函数返回之前运行一次。
由于campgrounds
数组中的第一个元素的键isReserved
设置为false
(以编程方式表示为campgrounds[0].isReserved === false
),因此在函数返回。
您已经有一个有关如何使其工作的答案,因此,我将告诉您为什么它不起作用。
问题出在您的return语句中,您在for循环中创建了它,而您本应在它之后创建它。就像您编写代码一样,仅当匹配的营地是第一个营地时,它才能返回一个值。
这就是为什么要注意缩进很重要的原因。下面是您的确切代码,带有更好的缩进。
function findMyCampsites(campgrounds,partySize){
let result = []
for (i = 0; i < campgrounds.length; i++) {
if (campgrounds[i].isReserved === false) {
if (campgrounds[i].view === view) {
result.push(campgrounds[i].view)
if (campgrounds[i].partySize === partySize){
result.push(campgrounds[i].partySize)
result = result + 1;
}
}
}
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 }
]
console.log(findMyCampsites(campgrounds,"ocean",8))
console.log(findMyCampsites(campgrounds,"forest",4))
相同的代码,仅需进行一些更正即可
function findMyCampsites(campgrounds,partySize){
let result = []
for (i = 0; i < campgrounds.length; i++) {
if (campgrounds[i].isReserved === false) {
if (campgrounds[i].view === view) {
if (campgrounds[i].partySize === partySize){
// only push if all tests passed
result.push(campgrounds[i].view,campgrounds[i].partySize)
// removed the result = result + 1
// since it would transform result into a number
// and break the loop
}
}
}
}
// return is as it's expected position
return result;
}
let campgrounds = [
{ number: 1,4))
,
如果您想使用for
循环,请使用for ... of
statement并直接获取对象,而无需使用索引(您错过了声明,从而使i
成为全局变量)。
在循环内部,您可以撤消支票并提前continue
。
在循环的最后,您得到了想要的对象。
function findMyCampsites(campgrounds,partySize) {
let result = [];
for (let ground of campgrounds) {
if (ground.isReserved) continue;
if (ground.view !== view) continue;
if (ground.partySize !== partySize) continue;
result.push(ground.number);
}
return result;
}
let campgrounds = [{ number: 1,isReserved: true }];
console.log(findMyCampsites(campgrounds,'ocean',4));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。