【问题标题】:move object from nested array to another array in react在反应中将对象从嵌套数组移动到另一个数组
【发布时间】:2021-06-23 18:20:44
【问题描述】:

我需要在单击按钮时将所有选定的对象从一个嵌套数组移动到另一个。我的数据结构是:

  const Data = [
    {
      name: "Steel Support, Aviation Lights, Std", // match parent array name
      code: "450W0619P001",
      reserved: [
        { serial: "one", selected: true }, // move all selected: true items to consumed array
        { serial: "two", selected: true },
      ],
      consumed: [],
    },
    {
      name: "Lock Nut, Prevailing Torque, M12x1.75m", // match parent array name
      code: "450W0619P001",
      reserved: [
        { serial: "one", selected: true },
        { serial: "two", selected: true },
        { serial: "three", selected: false },
      ],
      consumed: [],
    },
  ];

  const [erpParts, setErpParts] = useState(Data);

为了实现这一点,我编写了以下函数:

const markConsumed = (parentArr) => {
    setErpParts((erpParts) =>
      erpParts.map((x) => {
        if (x.name !== parentArr.name) return x;
        else {
          const consumedUpdated = x.consumed;
          const reservedUpdated = x.reserved.map((res) => {
            if (res.selected == true) {
              return consumedUpdated.push(res), x.reserved.splice(res, 1);
            }
          });
          return { ...x, reserved: reservedUpdated, consumed: consumedUpdated };
        }
      })
    );
  };

不幸的是,我的函数没有返回所需的结果。这就是我调用函数的方式:

<Button onPress={()=> markConsumed(activePart)}>MARK CONSUMED</Button>

请对此进行调查,并让我知道我的功能中的问题。在预期的结果中,我需要将所有选定的部分从保留数组移动到消耗数组,如下所示:

const Data = [
    {
      name: "Steel Support, Aviation Lights, Std", // match parent array name
      code: "450W0619P001",
      reserved: [],
      consumed: [
      { serial: "one", selected: true }, // parent array name matched and moved selected items from reserved to consumed array
      { serial: "two", selected: true },
     ],
    },
    {
      name: "Lock Nut, Prevailing Torque, M12x1.75m",
      code: "450W0619P001",
      reserved: [
        { serial: "one", selected: true },
        { serial: "two", selected: true },
        { serial: "three", selected: false },
      ],
      consumed: [],
    },
  ];

【问题讨论】:

    标签: javascript reactjs multidimensional-array


    【解决方案1】:

    使用基本循环,并推动思考它应该属于的地方。

    const Data = [{ name: "Steel Support, Aviation Lights, Std", code: "450W0619P001", reserved: [{ serial: "one", selected: true }, { serial: "two", selected: true },], consumed: [], }, { name: "Lock Nut, Prevailing Torque, M12x1.75m", code: "450W0619P001", reserved: [{ serial: "one", selected: true }, { serial: "two", selected: true }, { serial: "three", selected: false },], consumed: [], },];
    
    function markConsumedAndUpdate(filterName) {
        return Data.map(item => {
            if (item.name != filterName) return item
            let reserved = []
            for (const elem of item.reserved)
                if (!elem.selected)
                    reserved.push(elem)
                else
                    item.consumed.push(elem);
    
            item.reserved = reserved;
            return item
        });
    }
    markConsumedAndUpdate("Steel Support, Aviation Lights, Std")
    markConsumedAndUpdate("Lock Nut, Prevailing Torque, M12x1.75m")
    
    console.log(Data)

    【讨论】:

    • 感谢努尔。它正在工作,但不如预期。当我尝试使用相同的函数并更新消耗的数组而不是从保留中推送新项目时,它会替换所有旧项目。我需要将项目从保留推送到消费。用例是用户将从保留中选择项目,一旦他单击按钮,我们会将标记的项目移动到消费。
    • 这能回答你的问题吗?还是我错过了什么?
    • 没有。我需要将所选项目推入保留数组中,当我单击带有函数的按钮时,它会替换保留数组中的所有旧项目
    • 请看能否根据用例更新功能
    • 为什么不直接推送项目?等一下……我会更新我的答案
    猜你喜欢
    • 2021-09-03
    • 2018-02-05
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 2018-02-06
    • 2017-07-11
    相关资源
    最近更新 更多