【问题标题】:Combine the result of two input fields with JavaScript?将两个输入字段的结果与 JavaScript 结合起来?
【发布时间】:2020-07-07 11:12:55
【问题描述】:

作为输入表单的结果,我有几个字符串,我希望它们转换它们,因此它们适合我的 ajax 请求的数据。我正在寻找一种简单的方法,但我无法做到。基本上我想转换/映射这个数组:

[
{ name: "[1][apples]", value: "2" }
{ name: "[1][melons]", value: "1" }
{ name: "[2][apples]", value: "2" }
{ name: "[2][melons]", value: "4" }
{ name: "[3][apples]", value: "3" }
{ name: "[3][melons]", value: "2" }
]

进入

[{"id": 1, "apples": 2, "melons": 1}, {"id": 2, "apples": 2, "melons": 4}, {...}]

有什么想法吗?我会很感激一些提示?不过,我无法通过 html 找到简单的解决方案。

谢谢

【问题讨论】:

  • 所以您想将[1][apples][1][melons] 一起收集,比如订单 ID #1,其中包含 2 个苹果(价值)和 1 个甜瓜?
  • 另外,它们总是这样排列吗?他们永远不会像[1][apples] [2][apples] [1][melons] 那样跳来跳去?如果您保证所有相似的数字都是按顺序排列的,那么它会简化它们的收集。
  • 只考虑遍历数组的思路,使用let parts = theArray[i].name.match(/\[(\d)\]\[([a-z]+)\]/); 解码对象的名称,这使得parts[1] 成为订单号,parts[2] 成为产品名称。不管怎样,只是一个我不想失去的想法,如果我回来写一个答案。

标签: javascript html


【解决方案1】:

您可以使用 for 循环来访问每个元素并显示它们。 请参阅此链接。 For loop in multidimensional javascript array

【讨论】:

    【解决方案2】:

    首先,我使用正则表达式替换了方括号并形成了一个新数组。之后,我使用扩展运算符合并了具有相同 ID 的对象。

    你可以参考下面的代码来解决这个问题。

    let array = [
        { name: "[1][apples]", value: "2" },
        { name: "[1][melons]", value: "1" },
        { name: "[2][apples]", value: "2" },
        { name: "[2][melons]", value: "4" },
        { name: "[3][apples]", value: "3" },
        { name: "[3][melons]", value: "2" }];
    
    let newArray = [];
    let result = [];
    array.forEach((obj, i) => {
       let nameArray = obj.name.replace(/[\[\]']+/g, ' ').trim().split(' ');
       let o = {};
       o['id'] = parseInt(nameArray[0]);
       o[nameArray[1]] = obj.value;
       newArray.push(o);
    });
    
    for(let i = 0; i< newArray.length; i++) {
       for(let j = i+1; j < newArray.length; j++) {
          if(newArray[i].id === newArray[j].id) {
             let o = {...newArray[i], ...newArray[j]};
             result.push(o);`enter code here`
          }
       }
    }
    
    console.log('Final result', result);
    

    【讨论】:

      【解决方案3】:

      感谢您的意见。我认为我的问题需要更具体:

      (1) 是的,它们总是有序的。

      (2) 我在 html 中输入标签的名称似乎是一个多维数组。不是这种情况!我尝试了一些东西,但结果是php。

      我找到了以下解决方法:

      function apiAdapter() {
          var arrayToCopy = $("#formsteps").serializeArray();
          var copiedArray = [];
          for (let i = 0; i < arrayToCopy.length; i += 2) {
              var id = arrayToCopy[i].name.slice(arrayToCopy[i].name.indexOf('[') + 1, arrayToCopy[i].name.indexOf(']'));
              copiedArray.push({ "id": id, "apples": arrayToCopy[i].value, "melons": arrayToCopy[i + 1].value })
          }
          return copiedArray;
      }
      

      由于我是 JavaScript 新手,我一直在寻找更好的解决方案。再次感谢您的帖子。

      【讨论】:

        猜你喜欢
        • 2016-09-11
        • 2021-09-28
        • 1970-01-01
        • 2011-08-02
        • 2018-03-09
        • 1970-01-01
        • 2023-04-06
        • 2011-11-20
        • 2020-03-25
        相关资源
        最近更新 更多