typescript 为什么在未定义的数组中?

g6ll5ycj  于 2022-12-27  发布在  TypeScript
关注(0)|答案(2)|浏览(193)

我的代码
https://codesandbox.io/s/focused-thompson-w7v9c2?file=/index.tsx

<Formik
        initialValues={initialValues}
        onSubmit={async (values) => {
          await new Promise((r) => setTimeout(r, 500));
          // alert(JSON.stringify(values, null, 2));
          values.product.map((item, i: number) => {
            let qty: number[] = [];
            console.log(i + "-------qty------");
            console.log(item.qty);
            console.log(i + "-------price------");
            console.log(item.price);

            if (item.qty! && item.price!) {
              qty[i] = item.qty * item.price;

              console.log(qty);
            }
              const result = qty.reduce((sum, number) => {
                return sum + number;
              }, 0);
              setSum(result)
            console.log("-------result------");
            console.log(result);

            console.log("-------Sum------");
            console.log(sum);
            console.log("-------langth------");
            console.log(i);
          });
        }}
      >

我把价格和数量加到连续数组中。我需要price + qty组合,但是结果数组[ undefined, 30][undefined,undefined ,40]当我把数据加到数组中时,我想记录在const [sum, setSum] = useState(0)

wyyhbhjk

wyyhbhjk1#

您将在每个迭代中为每个产品设置sum。您可能需要阅读以下内容:reducemap

<Formik
        initialValues={initialValues}
        onSubmit={async (values) => {
          await new Promise((r) => setTimeout(r, 500));
          // alert(JSON.stringify(values, null, 2));
          const result = values.product.reduce((sum, p) => {
                return sum + p.qty * p.price;
              }, 0);
          setSum(result)
          
            console.log(result);

          });
        }}
      >
1rhkuytd

1rhkuytd2#

你的if条件是错误的.替换这个

if (item.qty! && item.price!) {

用这个

if (!item.qty && !item.price) {

相关问题