Javascript 如何使用TypeScript查找存在于另一个数组中的数组中的第一个对象?
我有两个对象数组。我只想检查当我们在其他对象数组中获得第一个匹配时,它将返回数组中的第一个匹配对象。我只想返回第一个匹配,而不是所有匹配。第一个匹配后我无法断开贴图 例1:-Javascript 如何使用TypeScript查找存在于另一个数组中的数组中的第一个对象?,javascript,arrays,typescript,Javascript,Arrays,Typescript,我有两个对象数组。我只想检查当我们在其他对象数组中获得第一个匹配时,它将返回数组中的第一个匹配对象。我只想返回第一个匹配,而不是所有匹配。第一个匹配后我无法断开贴图 例1:- var array1 = [{name:'Ram',lastname:'kumar'},{name:'Shyam',lastname:'kumar'},{name:'Mohan',lastname:'kumar'},{name:'Amit',lastname:'kumar'}]; var array2 = [{name:'
var array1 = [{name:'Ram',lastname:'kumar'},{name:'Shyam',lastname:'kumar'},{name:'Mohan',lastname:'kumar'},{name:'Amit',lastname:'kumar'}];
var array2 = [{name:'Anil',lastname:'kumar'},{name:'Shyam',lastname:'kumar'},{name:'Mohan',lastname:'kumar'},{name:'Anjali',lastname:'kumari'}];
检查array2是否存在于array1中如果array2的对象在array1中找到,则它将只返回array2的第一个匹配项
输出:[{name:'Shyam',lastname:'kumar'}]
例2:-
var array1 = [{name:'Ram',lastname:'kumar'},{name:'Shyam',lastname:'kumar'},{name:'Mohan',lastname:'kumar'},{name:'Amit',lastname:'kumar'}];
var array2 = [{name:'Anil',lastname:'kumar'},{name:'Arti',lastname:'kumari'},{name:'Mohan',lastname:'kumar'},{name:'Anjali',lastname:'kumari'}];
输出:[{name:'Mohan',lastname:'kumar'}]
//代码
var a = [{name:'Ram',lastname:'kumar'},{name:'Shyam',lastname:'kumar'},{name:'Mohan',lastname:'kumar'},{name:'Amit',lastname:'kumar'}];
var b = [{name:'Anil',lastname:'kumar'},{name:'Shyam',lastname:'kumar'},{name:'Mohan',lastname:'kumar'},{name:'Anjali',lastname:'kumari'}];
var c = [];
b.forEach(function(user) {
var exists = false;
for (let i=0; i<a.length && !exists; i++){
exists = a[i].name === user.name ;
}
if(exists===true)
{
c.push(Object.assign({},user,{exists}));
return;
}
});
console.log(c);
var a=[{name:'Ram',lastname:'kumar'},{name:'Shyam',lastname:'kumar'},{name:'Mohan',lastname:'kumar'},{name:'Amit',lastname:'kumar'}];
变量b=[{name:'Anil',lastname:'kumar'},{name:'Shyam',lastname:'kumar'},{name:'Mohan',lastname:'kumar'},{name:'Anjali',lastname:'kumari'}];
var c=[];
b、 forEach(函数(用户){
var=false;
对于(设i=0;隔离
解释
您不需要使用“classic”let i=0
循环技术,因为您可以使用方法和
我们需要与条件匹配的array2
的第一个元素,因此我们使用array2.find()
,当任何元素为提供的回调返回true
时,它就会停止
我们检查array2
元素的条件是它们包含在array1
中。如果这些是原始值,则可以使用。有关这些问题的更多解释,请参见以下问题的答案:
在处理对象时,我们不能依赖于两个对象之间的严格比较。当且仅当两个对象引用内存中的同一对象时,这将是正确的。但我们要确定一个对象是“相同的”如果其所有属性都具有相同的值。您可以使用类似的帮助器或查看此问题的答案:
这里我们只有两个属性,它们都是string
,因此很容易定义我们自己的比较检查。如果:
o1.name === o2.name && o1.lastname === o2.lastname
我们想在array2
中find()
找到array1
包含匹配项的第一个元素。我们使用array1.some()
检查匹配项。如果array1
中的任何元素与条件匹配,此函数将返回true
。它将在找到任何true
元素后立即停止
const res = array2.find((o2) =>
array1.some((o1) => o1.name === o2.name && o1.lastname === o2.lastname)
);
通过内联定义所有回调,我们避免了任何类型脚本类型注释的需要。
o1
和o2
的类型可以从array1
和array2
的类型中正确推断出来。您可以将其分解为若干部分,但需要写出函数参数的类型
解决方案
解释
您不需要使用“classic”let i=0
循环技术,因为您可以使用方法和
我们需要与条件匹配的array2
的第一个元素,因此我们使用array2.find()
,当任何元素为提供的回调返回true
时,它就会停止
我们检查array2
元素的条件是它们包含在array1
中。如果这些是原始值,则可以使用。有关这些问题的更多解释,请参见以下问题的答案:
在处理对象时,我们不能依赖于两个对象之间的严格比较。当且仅当两个对象引用内存中的同一对象时,这将是正确的。但我们要确定一个对象是“相同的”如果其所有属性都具有相同的值。您可以使用类似的帮助器或查看此问题的答案:
这里我们只有两个属性,它们都是string
,因此很容易定义我们自己的比较检查。如果:
o1.name === o2.name && o1.lastname === o2.lastname
我们想在array2
中find()
找到array1
包含匹配项的第一个元素。我们使用array1.some()
检查匹配项。如果array1
中的任何元素与条件匹配,此函数将返回true
。它将在找到任何true
元素后立即停止
const res = array2.find((o2) =>
array1.some((o1) => o1.name === o2.name && o1.lastname === o2.lastname)
);
通过内联定义所有回调,我们避免了任何类型脚本类型注释的需要。
o1
和o2
的类型可以从array1
和array2
的类型中正确推断出来。您可以将其分解为若干部分,但需要写出函数参数的类型
您就快到了:只需将输出限制为第一个匹配
花了一段时间才理解您的问题。如果我理解正确,您有两个数组,a
包含对象,b
包含可能与a
中的对象匹配或不匹配的对象
您希望构造一个数组c
,该数组只包含两个数组之间的第一个匹配对象
我不清楚“第一场比赛”是什么意思。例如:
从[p,q,r,s,r]和[m,n,p,s,r,s],第一个匹配可以是:
- [r] 如果您的意思是“第一个数组中的第一个,然后停止”
- [s] 如果您的意思是“第二个数组中的第一个,然后停止”
- [r,s]如果您的意思是“对于第一个数组中的每个项目,第二个数组中的第一个匹配”
- [s,r]如果你的意思是反之亦然
不幸的是,您的示例对于诊断您所指的4个选项中的哪一个没有帮助,因为只有一个匹配项
另一件不清楚的事情是,您是否只需要匹配.name
属性(其中