Javascript 从嵌套循环获取信息以有条件地呈现jsx

Javascript 从嵌套循环获取信息以有条件地呈现jsx,javascript,reactjs,loops,Javascript,Reactjs,Loops,我有一个对象,我必须在其中循环两次,以检查我应该在react中渲染什么 我的尝试: // categories is my nested object const checkedCategories = [...categories]; for (let i = 0; i < categories.length; i++){ for (let j =0; j < categories[i].products.length; j++){ const currentImag

我有一个对象,我必须在其中循环两次,以检查我应该在react中渲染什么

我的尝试:

// categories is my nested object
const checkedCategories = [...categories];

for (let i = 0; i < categories.length; i++){
  for (let j =0; j < categories[i].products.length; j++){
    const currentImageType = categories[i].products[j].imageTypes;

    // get information from action in store(mobx) to check if image exists
    const image = images.getDefault(currImageType);

    if (image) {
      //error cannot add property visible, object is not extensible
      checkedCategories[i].visible = true;
    }
  }
}

const categoryTabs = checkedCategories.map((category, index) => {
  if (category.visible){
    return (
      <Product
          key={category.name}
          product={category.products}
       />
    )
  }
});
//类别是我的嵌套对象
常量checkedCategories=[…类别];
for(设i=0;i{
如果(类别可见){
返回(
)
}
});

我想了解如何解决不可扩展对象的问题,并仅渲染具有图像的对象(我从嵌套循环中获得的存储信息)

您的循环中有错误。如果您将循环更改为下面的,它应该可以工作。下面的代码更清晰,更容易推理

const checkedCategories = [];
categories.forEach(cat => {
  let isVisible = false;
  cat.products.forEach(product => {
    const image = images.getDefault(product.imageTypes);
    isVisible = isVisible || !!image;

  });
  checkedCategories.push(Object.assign({}, cat, { visible: isVisible });
};

现在还不清楚你想做什么,但看看你的代码,这似乎是不正确的:
for(让j=0;j
。你是说
for(让j=0;j
?是的,当然,但是这个错误有一个问题://错误无法添加可见的属性,对象不可扩展它更干净,但我得到了相同的错误//错误无法添加可见的属性,对象不可扩展对不起,应该使用checkedCategories来完成整个任务吗?从原始问题看不清楚您是否有
自由ze
您的对象在某个点?您可以创建一个新对象,而不是指定
可见的对象。我使用严格模式,我必须使用此模式,但如何以这种方式执行我想要的操作?我想用额外的键创建新对象(如果图像存在,则可见)然后循环此新对象以仅在关键点可见时渲染。@DawidkwiattonńI更新了我的答案以创建新对象。