Javascript nodejs对象中的字符串操作

Javascript nodejs对象中的字符串操作,javascript,arrays,node.js,javascript-objects,Javascript,Arrays,Node.js,Javascript Objects,我在nodeJS中有一个场景 我有一个包含大量元素和数组的对象 var Obj={ 计数:3, 项目:[{ 组织机构代码:FP1, 组织名称:FTE流程组织 }, { 组织机构代码:T11, 组织名称:FTE离散组织 }, { 组织机构代码:M1, 机构名称:西雅图制造 } ] }; 情况是这样的。我必须根据标准筛选结果。 如果organizationCode或organizationName以特定字符开头,或以或包含特定单词结尾,则有打印输出。 例如,如果用户输入以M开头或以下以M开头,则应返

我在nodeJS中有一个场景

我有一个包含大量元素和数组的对象

var Obj={ 计数:3, 项目:[{ 组织机构代码:FP1, 组织名称:FTE流程组织 }, { 组织机构代码:T11, 组织名称:FTE离散组织 }, { 组织机构代码:M1, 机构名称:西雅图制造 } ] }; 情况是这样的。我必须根据标准筛选结果。 如果organizationCode或organizationName以特定字符开头,或以或包含特定单词结尾,则有打印输出。 例如,如果用户输入以M开头或以下以M开头,则应返回

{
  "organizationCode": "M1",
  "organizationName": "Seattle Manufacturing"
}
如果用户输入以org结尾,则

{ 组织机构代码:FP1, 组织名称:FTE流程组织 }, { 组织机构代码:T11, 组织名称:FTE离散组织 }, 如果它输入包含11,那么下面应该返回

{ 组织机构代码:T11, 组织名称:FTE离散组织 },
我有数千张唱片。我正在寻找优化的方式来获得输出。我是新来的NodeJs,所以很难完成它。

首先要做的事。下面是一些您可以使用的字符串函数:

一些字符串。用“字符串”结束

一些字符串。以“some”开头

一些字符串。包括“ome”

您可以将object与object.values进行转换

但是如果我这样做的话,我可能会像下面这样

//我假设在nodejs中有一些变量可以搜索 //比如说去哪里搜索,去哪里搜索 var arrToSearch=[ {组织代码:FP1,组织名称:FTE流程组织}, {组织代码:T11,组织名称:FTE离散组织}, {组织代码:M1,组织名称:西雅图制造}, ]; 函数搜索arr,Where-ToSearch,whatToSearch{ 返回阵列滤波器 ch=> ch.organizationCode[何处搜索]何处搜索|| ch.organizationName[何处搜索]何处搜索 ; } console.logsearcharrToSearch,endsWith,11; //我们还可以将数组发送到函数,因此在这种情况下,对象就在这里 变量对象={ 计数:3, 项目:[ { 组织机构代码:FP1, 组织名称:FTE流程组织, }, { 组织机构代码:T11, 组织名称:FTE离散组织, }, { 组织机构代码:M1, 组织名称:西雅图制造, }, ], }; //你能做的就是 console.logsearchobject.items,StartWith,FTE;
您可以与和一起使用。

您可以使用数组过滤器,遍历所有元素并根据需要处理它们

此外,要检查一个字符串是否包含另一个字符串,可以对其使用不敏感匹配

var Obj={ 计数:3, 项目:[ { 组织机构代码:FP1, 组织名称:FTE流程组织, }, { 组织机构代码:T11, 组织名称:FTE离散组织, }, { 组织机构代码:M1, 组织名称:西雅图制造, }, ], }; 常量过滤器=以开始,以结束,包含=>{ const result=Obj.items.filteritem=>{ 如果你从{ 回来 item.organizationCode[0]。toLowerCase===以.toLowerCase开头|| item.organizationName[0].toLowerCase==以.toLowerCase开头 对:错 }否则 以…结尾{ 回来 item.organizationCode[item.organizationCode.length].toLowerCase===以.toLowerCase结尾|| item.organizationName[item.organizationName.length].toLowerCase===以.toLowerCase结尾 对:错 }否则{ 回来 item.organizationCode.matchcontains,'i'|| item.organizationName.matchcontains,'i' 对:错 } }; 返回结果; };
console.logfilterF,null,null;//测试运行这里是一个简单的解决方案,最初分析用户条件并筛选列表

它有几个改进点,但这是一个良好的开端

const analyzeCond=条件=>{ 让conditionParts=condition.split'。filterstr=>str!=; 如果零件长度小于3{ 返回null; } //检查字段 const fieldName=conditionParts.shift; 如果!['organizationCode','organizationName']。包括字段名{ 返回null; } //检查操作员 const运算符=conditionParts.shift; 如果['start','ends'].includeOperator{ const with word=conditionParts.shift; 如果withWord!=“with”{ 返回null; } }else if运算符!==“包含”{ 返回null; } const userText=conditionParts.join“”; 返回{fieldName,operator,userText}; }; const compareFns={ 开始:查询,text=>text.startsWithquery, 结束:查询,text=>text.endsWithquery, 包含:查询,text=>text.includeQuery, }; 常量过滤器=列表,用户输入=>{ 常量条件=analyzeConduserInput; 如果条件===nul l{ 返回null; } //基于用户输入的过滤器 return list.filteritem=>{ 返回compareFns[condition.operator]condition.userText,项[condition.fieldName]; }; }; 常量对象={ 计数:3, 项目:[{ 组织机构代码:FP1, 组织名称:FTE流程组织 }, { 组织机构代码:T11, 组织名称:FTE离散组织 }, { 组织机构代码:M1, 机构名称:西雅图制造 }] }; //使用丑陋但可能的用户输入执行示例 const result=filterbj.items,“organizationName以settle Ma开头”; 如果结果为!==空的{ 控制台。记录“筛选结果”,结果; }否则{ 日志“用户输入没有预期的格式”;
}您可以根据搜索字符串执行操作并更改11:let result=Obj.items.filteri=>i.organizationCode.includes'11'| | i.organizationName.includes'11';这回答了你的问题吗?是的,我想要同样的答案。唯一的问题是输入是数组,在我的问题中输入是对象。我不熟悉java脚本,所以无法修改过滤器。这是给无法读取的过滤器错误。非常好的解决方案,我喜欢它!这个答案是完美的。唯一的区别是这个答案输入是数组,这里我们把输入作为一个对象。你能建议修改吗?希望修改是为了回答您的问题:当我使用console.log打印obj.items时,它给出的是未定义的。您能再试一次吗?只需复制所有代码,粘贴到test.js文件和node test.js中。您能帮我修改这个答案吗。在这个回答中,输入是一个数组。在我的问题中,输入是一个对象。过滤器出现错误。