javascript 如何记录数组值而不硬编码数组中的位置?

yquaqz18  于 2023-03-16  发布在  Java
关注(0)|答案(2)|浏览(119)

我有一个循环,从三个不同的输入框中获取输入。这个循环在记录输入时工作得很好,但我试图在没有指定和硬编码确切位置的情况下记录输入的值。

var getInput = $("input");
for (var i = 0; i < getInput.length; i++)
  console.log(getInput[i].id, " => Input", i, " = ", getInput[i].value);

我可以使用console.log(index[1])console.log(index[2])console.log(index[3])等,但问题是我有一个表可以有额外的行,所以它们可能是一行,两行,三行,等等,所以你可以想象硬编码每一个索引是没有意义的。我试图弄清楚的是如何在不指定索引位置的情况下记录输入的值,而是使用变量的属性或id。所以如果我有

<input
  type="text"
  id="DEPLOYER_PROJECT"
  name="Project Name"
  class="vcheck"
  placeholder=""
> 
<input
  type="text"
  id="OBJ_TYPE"
  name="OBJ_TYPE"
  class="vcheck"
  placeholder=""
>

而不是尝试记录OBJ_TYPE或console.log(getInput[OBJ_TYPE]));的所有示例
这样做的原因是我必须将数据插入数据库(我知道SQL注入,这是临时的)
数据库(插入表格(部署方项目,对象类型)值('"+获取输入[1] +"','”+获取输入[2] +"'))
正如您所想象的,硬编码数组在每个示例只有一个示例的情况下可以正常工作,但如果表有额外的行,我就不能只硬编码getInput[3]、getInput[4]、getInput[5]、getInput[6]等。目标是,只要有ID为OBJ_TYPE的输入,它就会获取与其关联的输入,并将其插入到数据库中已经假设的正确位置。

k5ifujac

k5ifujac1#

您可以使用forEach循环,通过输入的className循环输入

var getInput = document.querySelectorAll(".vcheck");
    
    getInput.forEach(element => {
        console.log(element.value)
    });
tmb3ates

tmb3ates2#

根据SQL用例,您需要的是表示键(列名)和值的结构。
您可以使用Object.fromEntries()创建此文件

const columnValues = Object.fromEntries(
  Array.from(document.querySelectorAll("input.vcheck"), ({ id, value }) => [
    id,
    value,
  ])
);

它看起来像这样

{
  DEPLOYER_PROJECT: "some value",
  OBJ_TYPE: "some other value",
}

然后您可以将其发送到后端以构造SQL查询...

// assuming something like req.body.columnValues

// Valid column names
const COLUMN_NAMES = new Set(["DEPLOYER_PROJECT", "OBJ_TYPE"]);

// array of columns to use in your query
const cols = Object.keys(req.body.columnValues).filter((col) =>
  COLUMN_NAMES.has(col)
);

// array of values to bind in your query
const values = cols.map((col) => req.body.columnValues[col]);

相关问题