【问题标题】:the for loop stops after the first true in iffor 循环在 if 中的第一个 true 之后停止
【发布时间】:2023-03-28 15:03:01
【问题描述】:

我的 for 循环有问题

function drawProductUI(array){
    var productsUI = array.map((item) => {
            if (productsInFavArr) {
               for(let j=0; j < productsInFavArr.length; j++){
                    console.log(j);
                    if(productsInFavArr[j].id===item.id)
                    console.log(j);
              }
          }
    });

}
   

productsInFavArrlocalstorage 中的对象数组

当我在 if 语句之前 console.log(j) 时,它会给我输出: 0 1 这是正确的,因为我有两个对象 但是当我在 if 语句之后使用它时,它只给了我第一个 true,即: 0

还有两个 item.id === productsInFavArr[j].id 所以它们都是真的

这里是 productsInFavArr

let productsInFavArr = [
{
    title: "Sunglasses",
    imgURL: "images/Products/sunglasses.jpg",
    desc: "Lorem ipsum dolor sit amet consectetur adipisicing elit. Aut nulla adipisci fugiat pariatur recusandae repudiandae fuga molestias doloremque itaque obcaecati.",
    price:80,
    id: 1
},
{
    title: "Laptop",
    imgURL: "images/Products/laptop.jpg",
    desc: "Lorem ipsum dolor sit amet consectetur adipisicing elit. Aut nulla adipisci fugiat pariatur recusandae repudiandae fuga molestias doloremque itaque obcaecati.",
    price:100,
    id: 2
}]

谢谢

【问题讨论】:

  • map 用于转换数据。返回的数据是返回的结果(因为你有一个函数体箭头函数),但你没有显示return 语句。
  • productsInFavArr 是本地存储中的对象数组 localStorage 只保存字符串,不保存数组或对象。您是否使用JSON.parse() 将字符串转换回对象?
  • 你能正确缩进代码吗?你能举个例子说明数组是什么吗?
  • @crashmstr 我做了 return 声明,但我没有,但它在这里因为它太长了,我希望它看起来很简单,但它工作正常
  • 你的代码需要清理和缩进

标签: javascript arrays for-loop if-statement


【解决方案1】:
productsInFavArr=[
{
    title: "Sunglasses",
    imgURL: "images/Products/sunglasses.jpg",
    desc: "Lorem ipsum dolor sit amet consectetur adipisicing elit. Aut nulla adipisci fugiat pariatur recusandae repudiandae fuga molestias doloremque itaque obcaecati.",
    price:80,
    id: 1
},
{
    title: "Laptop",
    imgURL: "images/Products/laptop.jpg",
    desc: "Lorem ipsum dolor sit amet consectetur adipisicing elit. Aut nulla adipisci fugiat pariatur recusandae repudiandae fuga molestias doloremque itaque obcaecati.",
    price:100,
    id: 2
}]

function drawProductUI(array){
    var productsUI = array.map((item) => {
            if (productsInFavArr) {
               for(let j=0; j < productsInFavArr.length; j++){
                    console.log(item.id, "Before if:", j);
                    if(productsInFavArr[j].id===item.id)
                         console.log(item.id, "After", j);
              }
          }
    });

}

当我运行函数时

drawProductUI([{id:1}, {id:2}]);

我给了我正确的答案。

1 "Before if:" 0
1 "After" 0
1 "Before if:" 1
2 "Before if:" 0
2 "Before if:" 1
2 "After" 1

可能你的array参数格式不对?

【讨论】:

  • 其实我不这么认为这个参数是对的,它和“productsInFavArr”一样放了它的五个项目,它包括了productsInFavArr中的两个
  • 该代码也适用于 productsInFavArr 作为 drawProductUI 函数的参数。我还尝试了更多的 id,它只在after 控制台消息中输出想要的项目。
  • 我的示例是否如您所愿?如果没有,你能澄清问题出在哪里吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-13
  • 2019-10-17
  • 2021-09-15
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多