Javascript 替代jsx中的.map进行迭代?

Javascript 替代jsx中的.map进行迭代?,javascript,arrays,reactjs,jsx,Javascript,Arrays,Reactjs,Jsx,我在jsx中使用了这个: {item.result && item.result.length ? item.result.map((sale, i) => (sale.month === 1 ? <span key={i}>{sale.itemCount}</span> : 0)) : 0} 为了更好地理解,可以查看完整的代码 我已经尝试在JSX之外使用这个函数: con

我在jsx中使用了这个:

 {item.result && item.result.length
                  ? item.result.map((sale, i) => (sale.month === 1 ? <span key={i}>{sale.itemCount}</span> : 0))
                  : 0}
为了更好地理解,可以查看完整的代码


我已经尝试在JSX之外使用这个函数:

const searchResultDec = (item) => {
    if (item.result.length === 0) {
      return <span>0</span>; // returns 0 as expected
    }
    if (item.result.length !== 0) {
      item.result.forEach((result) => {
        if (result.month !== 12) {
          return <span>0</span>; // does not return anything
        }
        if (result.month === 12) {
          console.log(result.itemCount); // returns 1 for three items
          return <span>{result.itemCount}</span>; // does not return anything
        }
      });
    }
  };

只需返回
null
而不是0

{
  item.result && item.result.length
    ? item.result.map((sale, i) =>
        sale.month === 1 ? (
          <span key={i}>{sale.itemCount}</span>
        ) : null,
      )
    : null
}
{
item.result&&item.result.length
?项目结果图((销售,i)=>
sale.month==1(
{sale.itemCount}
):null,
)
:null
}
试试这个:

{item?.result?.length
                  ? item.result.map((sale, i) => 
sale.month === 1? <span key={i}>{sale.itemCount}</span> :0))
                  : 0}
{item?.result?.length
?项目结果图((销售,i)=>
sale.month==1?{sale.itemCount}:0)
: 0}

将问题分成几个独立的部分,然后将它们放在一起,这总是一个好主意。你可能想看一看,并总是试图尊重这一点。如果你这样做,你会写出比90%的程序员更好的代码。不幸的是,人类善于将碎片混合在一起。:-)

也就是说,您的代码中有一个逻辑,它试图获取一个月的订单数量。因此,有必要为此创建一个单独的函数:

const结果=[
{
“项目计数”:2,
“月份”:7
},
{
“项目计数”:-1,
“月份”:8
},
{
“itemCount”:0,
“月份”:9
}
];
函数getItemCountForMonth(订单摘要,月份){
const monthOrder=orderSummary.find(o=>o.month==month);
返回monthOrder?monthOrder.itemCount:0;
}
log(getItemCountForMonth(结果,7));
log(getItemCountForMonth(结果,8));
log(getItemCountForMonth(结果,9));

log(getItemCountForMonth(结果,10))虽然我需要一个0,但我会编辑我的问题,对不起。这可能是设置我的条件的更好方法,但如果没有sale.itemCount,则不会显示0。我不确定您试图实现什么。我想我们这里有个XY问题。请阅读以下内容:好的,对不起,我将更新我的问题。因此,您只想显示一个数字,该数字应为1月(第1个月)的itemCount或数字零。这是正确的吗?你一针见血,我每个月都在运行这个程序,以显示一个结果表。谢谢你,我会尽量记住你的建议。
<td>
    {searchResultDec(item)}
</td>
const result = [
    {
        "itemCount": 1,
        "month": 8
    },
    {
        "itemCount": 1,
        "month": 12
    }
]
{
  item.result && item.result.length
    ? item.result.map((sale, i) =>
        sale.month === 1 ? (
          <span key={i}>{sale.itemCount}</span>
        ) : null,
      )
    : null
}
{item?.result?.length
                  ? item.result.map((sale, i) => 
sale.month === 1? <span key={i}>{sale.itemCount}</span> :0))
                  : 0}