繁体   English   中英

检查记录是否存在于javascript对象中

[英]check if record exists in javascript object

我有一个Web应用程序,它将定界字段传递到另一个网页。 工作正常! 但是...我想列出javascript对象中不存在的字段(名称)。 如何做到这一点?

JS对象:

var members = [ { "Class": "E", "Rating": "1000", "ID": "16720664", "Name": "Adeyemon, Murie", "Expires": "1000.10.10" }, 
  { "Class": "B", "Rating": "1735", "ID": "12537964", "Name": "Ahmed, Jamshed", "Expires": "2018.10.18" }, 
  { "Class": "C", "Rating": "1535", "ID": "12210580", "Name": "Attaya, James", "Expires": "2019.01.12" }, 
  { "Class": "F", "Rating": "0001", "ID": "16281977", "Name": "Auld, Thomas", "Expires": "1000.10.10" }, 
  { "Class": "B", "Rating": "1793", "ID": "10117780", "Name": "Badamo, Anthony", "Expires": "2018.09.12" }
] 

JS代码:

let dataString = "Adeyemon, Murie|Ahmed, Jamshed|Attaya, James|Badamo, Anthony|Birmingham, Gerald|"; 
let splitString = dataString.split("|"); 

for (let i = 0; i < splitString.length; i++) { 
    $temp = splitString[i - 1]; 
    if ($temp > "") { 
        members.find(x => x.Name === $temp); 
    } 
}

使用filter

 var dataString = 'Adeyemon, Murie|Ahmed, Jamshed|Attaya, James|Badamo, Anthony|Birmingham, Gerald|' var members = [{"Class":"E","Rating":"1000","ID":"16720664","Name":"Adeyemon, Murie","Expires":"1000.10.10"},{"Class":"B","Rating":"1735","ID":"12537964","Name":"Ahmed, Jamshed","Expires":"2018.10.18"},{"Class":"C","Rating":"1535","ID":"12210580","Name":"Attaya, James","Expires":"2019.01.12"},{"Class":"F","Rating":"0001","ID":"16281977","Name":"Auld, Thomas","Expires":"1000.10.10"},{"Class":"B","Rating":"1793","ID":"10117780","Name":"Badamo, Anthony","Expires":"2018.09.12"}] var res = dataString.split('|').filter( name => !members.map(o => o.Name).find(n => n === name) ).filter(name=>name.trim()!=='') console.log(res); 

尝试将members数组简化为一Set名称。 然后您可以使用Set.prototype.has()过滤splitString数组

 const members = [{"Class":"E","Rating":"1000","ID":"16720664","Name":"Adeyemon, Murie","Expires":"1000.10.10"},{"Class":"B","Rating":"1735","ID":"12537964","Name":"Ahmed, Jamshed","Expires":"2018.10.18"},{"Class":"C","Rating":"1535","ID":"12210580","Name":"Attaya, James","Expires":"2019.01.12"},{"Class":"F","Rating":"0001","ID":"16281977","Name":"Auld, Thomas","Expires":"1000.10.10"},{"Class":"B","Rating":"1793","ID":"10117780","Name":"Badamo, Anthony","Expires":"2018.09.12"}] const dataString = "Adeyemon, Murie|Ahmed, Jamshed|Attaya, James|Badamo, Anthony|Birmingham, Gerald|"; const names = members.reduce((c, {Name}) => c.add(Name), new Set()) const missing = dataString.split('|') .filter(name => name.trim() && !names.has(name)) .join('; ') // output from your comment on another answer console.info(missing) 

我添加了name.trim()来过滤尾随| 在您的dataString


创建Set的原因是避免在整个members数组中搜索dataString每个名称。 Set.prototype.has()应为O(1)

您可以先创建Name到对象的映射,然后从该对象/映射中的字符串搜索名称,这将花费O(n)的n个名称。

 var members = [ { "Class": "E", "Rating": "1000", "ID": "16720664", "Name": "Adeyemon, Murie", "Expires": "1000.10.10" }, { "Class": "B", "Rating": "1735", "ID": "12537964", "Name": "Ahmed, Jamshed", "Expires": "2018.10.18" }, { "Class": "C", "Rating": "1535", "ID": "12210580", "Name": "Attaya, James", "Expires": "2019.01.12" }, { "Class": "F", "Rating": "0001", "ID": "16281977", "Name": "Auld, Thomas", "Expires": "1000.10.10" }, { "Class": "B", "Rating": "1793", "ID": "10117780", "Name": "Badamo, Anthony", "Expires": "2018.09.12" } ]; var nameMap = members.reduce((prev, next) => { prev[next.Name] = next; return prev; }, {}); let dataString = "Adeyemon, Murie|Ahmed, Jamshed|Attaya, James|Badamo, Anthony|Birmingham, Gerald|"; let names = dataString.split("|"); let result = names.filter(name => name && !(name in nameMap)); console.log(result); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM