【问题标题】:For-if nested in for-iffor-if 嵌套在 for-if 中
【发布时间】:2021-02-20 19:30:09
【问题描述】:
//array

let posts = [{
    text: "First post!",
    id: "p1",
    comments: [{
        id: "c1",
        text: "First comment on first post!"
      },
      {
        id: "c2",
        text: "Second comment on first post!!"
      },
      {
        id: "c3",
        text: "Third comment on first post!!!"
      }
    ]
  },
  {
    text: "Aw man, I wanted to be first",
    id: "p2",
    comments: [{
        id: "c4",
        text: "Don't wory second poster, you'll be first one day."
      },
      {
        id: "c5",
        text: "Yeah, believe in yourself!"
      },
      {
        id: "c6",
        text: "Haha second place what a joke."
      }
    ]
  }
]


//loops
const removeComment = function(postId, commentID) {

  for (let post in posts) {
    if (posts[post].id == postId) {

      for (let Comment of posts.comments) {

        if (posts.comments[comment].id == commentID) {

          comment.splice(comment, 1)
        }
      }

    }
  }


}

//invoking the function

tweeter.removeComment("p2", "c6")

我正在尝试获取特定帖子(即“p2”)中的评论(即“c6”),并将其从数组中删除。

为了浏览 Comments 对象,我写了一个 for if 嵌套在 for-if 中; 我没有收到任何错误,但第一个 for-if 工作正常。 谢谢

【问题讨论】:

  • 请不要将代码作为图像包含在内。您可以编辑问题并添加minimal reproducible example吗?
  • 我是新来的,很抱歉。我现在编辑我的问题。谢谢
  • 您的代码中有很多接近但不准确的地方。对两个循环都使用for..of,它使事情变得更简单。此外,Array.splice 需要一个索引作为第一个参数,您必须为 cmets 保留一个索引计数器。看到 fiddle 做这项工作。您可能还想在找到匹配项时打破循环,我会让您解决,如何退出外循环。

标签: javascript arrays loops for-in-loop for-of-loop


【解决方案1】:

您需要在函数中进行一些更改。您正在使用let post in posts,它会在循环中给出数字,因此当您尝试将其作为对象访问时,您的逻辑是关闭的。

let Comment of posts.comments

您可能希望使用匹配的 postId 遍历特定评论。

您正在使用未定义的comment。检查下面的 sn-p,运行它并根据需要进行编辑。

let posts = [{
    text: "First post!",
    id: "p1",
    comments: [{
        id: "c1",
        text: "First comment on first post!"
      },
      {
        id: "c2",
        text: "Second comment on first post!!"
      },
      {
        id: "c3",
        text: "Third comment on first post!!!"
      }
    ]
  },
  {
    text: "Aw man, I wanted to be first",
    id: "p2",
    comments: [{
        id: "c4",
        text: "Don't wory second poster, you'll be first one day."
      },
      {
        id: "c5",
        text: "Yeah, believe in yourself!"
      },
      {
        id: "c6",
        text: "Haha second place what a joke."
      }
    ]
  }
]


//loops
const removeComment = (postId, commentID)=> {
  for (let post of posts) {
    if (post['id'] == postId) {
      for (let Comment of post.comments) {
        if (Comment['id'] == commentID) {
          post.comments.splice(post.comments.indexOf(Comment),1);
        }
      }
    }
  }
}
removeComment("p2","c6");
console.log(posts);

【讨论】:

  • 非常感谢!它现在可以按我的意愿工作了:) 澄清一下,当你写 post['id'] 时,你的意思是这个特定的 id,或者它的位置?
猜你喜欢
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
相关资源
最近更新 更多