JavaScript——在对象数组中查找匹配的对象

JavaScript——在对象数组中查找匹配的对象,javascript,Javascript,我试图在一组对象中搜索一个对象 注意,VAL和recs对象将是动态的 var vals = {ID: "4", LOC: "LA", SEQ: "1"}; var recs = [ {ID:"4", LOC:"LA", SEQ:"1"}, {ID:"4", LOC:"NY", SEQ:"1"}, {ID:"4", LOC:"CHI",SEQ:"1"} ]; 现在我需要检查VAL中的所有键:值对是否已经存在于REC中。在这种情况下,recs[0]与VAL完全匹配 以下是我的尝试:

我试图在一组对象中搜索一个对象

注意,VAL和recs对象将是动态的

var vals = {ID: "4", LOC: "LA", SEQ: "1"};

var recs = [
  {ID:"4", LOC:"LA", SEQ:"1"},
  {ID:"4", LOC:"NY", SEQ:"1"},
  {ID:"4", LOC:"CHI",SEQ:"1"}

];
现在我需要检查VAL中的所有键:值对是否已经存在于REC中。在这种情况下,recs[0]与VAL完全匹配

以下是我的尝试:

var vals =  {ID: "4", LOC: "LA", SEQ: "1"};


var recs = [
  {ID:"4", LOC:"LA", SEQ:"1"},
  {ID:"3", LOC:"NY", SEQ:"2"},
  {ID:"2", LOC:"CHI",SEQ:"3"}

];


for(var i = 0; i<recs.length; i++){  
    if(recs[i]["ID"] == vals["ID"] && recs[i]["LOC"] == vals["LOC"] && recs[i]["SEQ"] == vals["SEQ"]){
      console.log(true);
    }
    else{
      console.log(false);
    }  
}
var-vals={ID:“4”,LOC:“LA”,SEQ:“1”};
var recs=[
{ID:“4”,LOC:“LA”,SEQ:“1”},
{ID:“3”,LOC:“NY”,SEQ:“2”},
{ID:“2”,LOC:“CHI”,SEQ:“3”}
];
对于(var i=0;i您可以尝试以下方法:

函数myFind(记录、VAL){
返回记录部分(功能(obj){
用于(obj中的var x)
如果(VAL中的x&&obj[x]!=VAL[x])
返回false;
返回true;
});
}
var recs=[
{ID:4,LOC:“LA”,SEQ:“1”,USA:“USA”},
{ID:3,LOC:“NY”,SEQ:“2”,USA:“USA”},
{ID:2,LOC:“CHI”,SEQ:“3”,USA:“USA”}
];
var VAL={ID:“4”,LOC:“LA”,SEQ:“1”};
if(myFind(记录、VAL)){
警报(“发现”);
}否则{
警报(“未找到”);
}
您可以尝试以下方法:

函数myFind(记录、VAL){
返回记录部分(功能(obj){
用于(obj中的var x)
如果(VAL中的x&&obj[x]!=VAL[x])
返回false;
返回true;
});
}
var recs=[
{ID:4,LOC:“LA”,SEQ:“1”,USA:“USA”},
{ID:3,LOC:“NY”,SEQ:“2”,USA:“USA”},
{ID:2,LOC:“CHI”,SEQ:“3”,USA:“USA”}
];
var VAL={ID:“4”,LOC:“LA”,SEQ:“1”};
if(myFind(记录、VAL)){
警报(“发现”);
}否则{
警报(“未找到”);

}
您需要将其分成两个循环,一个用于数组的每个对象,一个用于对象的每个键:

for(var i = 0; i<recs.length; i++){  
  var found = false
  for(var key in recs[i]) {
    if(recs[i].hasOwnProperty(key)){
      if(recs[i][key] != vals[key]){
        found = true
      }
    }
  console.log(found)
}

for(var i=0;i您需要将其分成两个循环,一个用于数组的每个对象,一个用于对象的每个键:

for(var i = 0; i<recs.length; i++){  
  var found = false
  for(var key in recs[i]) {
    if(recs[i].hasOwnProperty(key)){
      if(recs[i][key] != vals[key]){
        found = true
      }
    }
  console.log(found)
}

for(var i=0;i
for(var i=0;i
for)(var i=0;i您可以在键上进行迭代;如下所示:

var-vals={ID:“4”,LOC:“LA”,SEQ:“1”,REGION:“USA”};
var recs=[{ID:4,LOC:“LA”,SEQ:“1”,REGION:“USA”},
{ID:3,LOC:“NY”,SEQ:“2”,REGION:“USA”},
{ID:2,LOC:“CHI”,SEQ:“3”,REGION:“USA”}
];
var IsName=true;
对于(变量i=0;i}
您可以在键上进行迭代;大致如下:

var-vals={ID:“4”,LOC:“LA”,SEQ:“1”,REGION:“USA”};
var recs=[{ID:4,LOC:“LA”,SEQ:“1”,REGION:“USA”},
{ID:3,LOC:“NY”,SEQ:“2”,REGION:“USA”},
{ID:2,LOC:“CHI”,SEQ:“3”,REGION:“USA”}
];
var IsName=true;
对于(变量i=0;i
试试这个:

for (var i = 0; i < recs.length; i++) {  
  var found = true;
  for (var p in vals) {
    if (vals.hasOwnProperty(p)) {
      if (recs[i][p] !== vals[p]) {
        found = false;
        break;
      }
    }
  }
  console.log(found);
}
for(var i=0;i
试试这个:

for (var i = 0; i < recs.length; i++) {  
  var found = true;
  for (var p in vals) {
    if (vals.hasOwnProperty(p)) {
      if (recs[i][p] !== vals[p]) {
        found = false;
        break;
      }
    }
  }
  console.log(found);
}
for(var i=0;i
您可以用于这类问题

您可以用于这类问题

这找不到项。对象引用不同。@Evantimboli。我没有看到
recs
的第二个声明。很抱歉,我现在更新了edit也找不到值。引用仍然不一样,因为e添加了在
rec
@evantimboli中变异值的缺点。奇怪的是,它在这里工作,我将添加一个代码段为什么使用
delete
?这将找不到该项。对象引用不同。@evantimboli。我没有看到
recs
的第二个声明。很抱歉,我现在更新了edit找不到e值。引用仍然不一样,还有一个缺点是在
rec
@evantimboli中对值进行变异。奇怪的是,它在这里起作用,我将添加一个代码段为什么要使用
delete
?所以循环键。
var-keys=Object.keys(vals);
来自经常这样做的人:Object.keys()非常快,因此比较每个对象的键数组的长度将是消除不匹配的快速方法。排序并将这些键连接到字符串中可以提供快速的成员身份比较。如果这两个快速测试都通过,则迭代并比较值。当然,如果性能不重要,只需执行两个未筛选的嵌套循环和KISS。问题是vuage.code>{a:1}
描述了
{a:1,b:2}
?它应该返回第一个结果、所有匹配项还是布尔值?所以循环键。
var-keys=Object.keys(vals);
来自经常这样做的人:Object.keys()非常快,因此比较每个对象的键数组的长度将是消除不匹配的快速方法。排序和连接