我试图在我的NodeJS项目中使用"if includes"声明来过滤从. text文件中提取的结果.其 idea 是,用户输入的序列号与前5个数字中的特定模型相关,因此我想过滤放入我的HTML Select 中的数据,但似乎只有在整个字符串相同的情况下才有效.也许我错了(我对JS很陌生,所以我很可能是),但据我的理解,.includes应该是"if X包含Y",而不是"if X = Y".我曾在我的项目中的其他地方使用过它来进行文本输入,但它的行为方式并非如此.

<div class="col-md-12 text-center serialtab">
    <h1>Serial Number:</h1>
    <input type="text" minlength="10" required id="serialnumberinput" name="serialnumberinput" class="serialtextbox" placeholder="Type Serial Number Here: 19180-12345">
    <button type="submit" class="buttonalt serialsubmit" id="serialsubmit" onclick="ReadSerials(), PopulateModelList();">SUBMIT</button>
</div>

....

<select class="fixselect" name="model" id="model" onchange="ReadModels()">
    <option value="" selected="selected" >Select Model</option>
    <!-- Models are added from the modelist.js script from the model.txt file -->
</select>
function PopulateModelList() {
    const fs = require("fs");
    const { parse } = require("csv-parse");

    var modellist = document.getElementById('model');
    var serial = document.getElementById("serialnumberinput").value; //I have tried without .value also
    var serialmodel = serial.substring(0,5); //Adding .value to this results in 'undefined'

    var testing = document.getElementById("modeltesting");
    testing.innerHTML += serialmodel; //Outputs '19180'

    fs.createReadStream("./model.txt") //Tried using it as a .csv also but it did not change anything
    .pipe(parse({
        delimiter: ",",
        from_line: 1,
    }))

    .on("data", function(row) {
        console.log(row);
        
        if (row.includes(serialmodel)) {
            modellist.innerHTML += '<option value="' + row + '">' + row + '</option>' ;
        }

        else {

        }
    })
}

我的"serialModel"var输出"19180",并且它应该从. text文件中调用的行是"19180 -Testing".如果我更改HTML以允许文本输入并在"serialnumberentry"字段中输入完整行"19180 - Testing",那么该函数将按预期工作,因此似乎需要整个字符串匹配.我try 使用indexOf,但这只是输出整个文件.我也try 了从其他论坛帖子中找到的许多其他解决方案,但我在中断后重新 Select 了这个项目,所以不记得这些具体是什么,抱歉.

推荐答案

据推测,您的CSV解析器正在提供row作为单元格值array.

来自MDN Array.prototype.100.

includes()方法使用SameValueZero算法将searchElement与数组的元素进行比较.

TLDR:数组方法正在寻找整个值,而不是部分值.

如果您想判断数组中的任何字符串元素是否包含子字符串,您可以使用Array.prototype.100String.prototype.101相结合,例如:

const row = [true, Infinity, "19180 - Testing", null, "foo"];
const serialModel = "19180"
const containsSerialModel = row.some(cellValue => 
  typeof cellValue === "string"
  && cellValue.includes(serialModel)
);
console.log(`"${serialModel}" ${containsSerialModel ? "found" : "not found"}`);

Javascript相关问答推荐

在具有焦点和上下文的d3多线图表中,如何将上下文的刷新限制在特定日期?

如何将拖放功能添加到我已自定义为图像的文件输入HTML标签中?

获取表格的左滚动位置

Next.js Next/Image图像隐含性有任何类型-如何修复?

通过使用100%间隔时间来代表我们还剩多少时间来倒计时

微软Edge编辑和重新发送未显示""

如何禁用附加图标点击的v—自动完成事件

在使用HighChats时如何避免Datatables重新初始化错误?

在HTML语言中调用外部JavaScript文件中的函数

闭包是将值复制到内存的另一个位置吗?

扩展类型的联合被解析为基类型

基于props 类型的不同props ,根据来自接口的值扩展类型

使用auth.js保护API路由的Next.JS,FETCH()不起作用

P5.js中的分形树

如何根据查询结果重新排列日期

对不同目录中的Angular material 表列进行排序

在传单的图像覆盖中重新着色特定 colored颜色 的所有像素

我想为我的Reaction项目在画布上加载图像/视频,图像正在工作,但视频没有

Reaction路由v6.4+数据API:重试加载程序而不显示错误

如何格式化API的响应