打字稿:如何从两组不同的对象中获取具有相同 属性 值但键不同的对象
typescript: How to get objects with the same property values but different keys from 2 different sets of Objects
我必须从表单中获取一组 Json 状态数据
objetSet1:
{id: 12, name: 'Foo Bar', email: 'foo@bar.com'},
{id: 23, name: 'Bar Foo', email: 'bar@foo.com'},
{id: 61, name: 'Barbell', email: 'barbell@mail.com'},
{id: 45, name: 'Joe Ocean', email: 'joe@ocean.com'}
objectSet2:
{ObjectId:15, name: 'someone', email: 'someone@mail.com'},
{ObjectId: 23, name: 'sometwo', email: 'sometwo@mail.com'},
{ObjectId: 72, name: 'seven ', email: 'seven@mail.com'},
{ObjectId: 23, name: 'five ', email: 'five@mail.com'}
我实际上是在寻找一种方法让这个表达式成为动态的
objectSet2 = objectSet2.filter(object => object.ObjectId === '23')
不是23个静态值,是objectSet1对应的值
结果应包含第一个对象集上存在 ID 的项目
预期输出:
objectSet2:
{ObjectId: 23, name: 'sometwo', email: 'sometwo@mail.com'},
{ObjectId: 23, name: 'five ', email: 'five@mail.com'}
同比接近,只需要像这样添加一个新过滤器:
objetSet1 = [{id: 12, name: 'Foo Bar', email: 'foo@bar.com'},
{id: 23, name: 'Bar Foo', email: 'bar@foo.com'},
{id: 61, name: 'Barbell', email: 'barbell@mail.com'},
{id: 45, name: 'Joe Ocean', email: 'joe@ocean.com'}];
objectSet2 = [{ObjectId:15, name: 'someone', email: 'someone@mail.com'},
{ObjectId: 23, name: 'sometwo', email: 'sometwo@mail.com'},
{ObjectId: 72, name: 'seven ', email: 'seven@mail.com'},
{ObjectId: 23, name: 'five ', email: 'five@mail.com'}];
var result = objectSet2.filter((obj2)=>objetSet1.filter((obj1)=>obj1.id==obj2.ObjectId).length>0)
console.log(result);
请注意obj1.id==obj2.ObjectId
比较。当内部过滤器上的正匹配计数大于零时,它返回 true。那么这就是外部过滤器的答案。
您可以从第一个数组创建一组 ID:
const ids = new Set(objectSet1.map(object => object.id));
然后你可以检查第二个数组中的对象是否在那个集合中
ids.has(object.ObjectId)
这以我认为更清晰的方式结合了 Jonas Wilms 和 Ictus 的回答,并且我对代码进行了注释,以便未来的读者了解正在做什么。
// Define Yoann Eddy's original two sets of objects, but as Arrays
let objectSet1 = [
{id: 12, name: 'Foo Bar', email: 'foo@bar.com'},
{id: 23, name: 'Bar Foo', email: 'bar@foo.com'},
{id: 61, name: 'Barbell', email: 'barbell@mail.com'},
{id: 45, name: 'Joe Ocean', email: 'joe@ocean.com'}
];
let objectSet2 = [
{ObjectId:15, name: 'someone', email: 'someone@mail.com'},
{ObjectId: 23, name: 'sometwo', email: 'sometwo@mail.com'},
{ObjectId: 72, name: 'seven ', email: 'seven@mail.com'},
{ObjectId: 23, name: 'five ', email: 'five@mail.com'}
];
// Get just the ID numbers from the first set
let ids = new Set(objectSet1.map(o => o.id));
// Filter the second set, keeping only the objects that have
// an object.ObjectId that is in the first set of IDs
let result = objectSet2.filter(o => ids.has(o.ObjectId));
console.log(result);
Ictus 的一体化生产线可以完成这项工作,但会更难维护,因为它更难被同事(或你未来的自己)理解
我必须从表单中获取一组 Json 状态数据
objetSet1:
{id: 12, name: 'Foo Bar', email: 'foo@bar.com'},
{id: 23, name: 'Bar Foo', email: 'bar@foo.com'},
{id: 61, name: 'Barbell', email: 'barbell@mail.com'},
{id: 45, name: 'Joe Ocean', email: 'joe@ocean.com'}
objectSet2:
{ObjectId:15, name: 'someone', email: 'someone@mail.com'},
{ObjectId: 23, name: 'sometwo', email: 'sometwo@mail.com'},
{ObjectId: 72, name: 'seven ', email: 'seven@mail.com'},
{ObjectId: 23, name: 'five ', email: 'five@mail.com'}
我实际上是在寻找一种方法让这个表达式成为动态的
objectSet2 = objectSet2.filter(object => object.ObjectId === '23')
不是23个静态值,是objectSet1对应的值
结果应包含第一个对象集上存在 ID 的项目
预期输出:
objectSet2:
{ObjectId: 23, name: 'sometwo', email: 'sometwo@mail.com'},
{ObjectId: 23, name: 'five ', email: 'five@mail.com'}
同比接近,只需要像这样添加一个新过滤器:
objetSet1 = [{id: 12, name: 'Foo Bar', email: 'foo@bar.com'},
{id: 23, name: 'Bar Foo', email: 'bar@foo.com'},
{id: 61, name: 'Barbell', email: 'barbell@mail.com'},
{id: 45, name: 'Joe Ocean', email: 'joe@ocean.com'}];
objectSet2 = [{ObjectId:15, name: 'someone', email: 'someone@mail.com'},
{ObjectId: 23, name: 'sometwo', email: 'sometwo@mail.com'},
{ObjectId: 72, name: 'seven ', email: 'seven@mail.com'},
{ObjectId: 23, name: 'five ', email: 'five@mail.com'}];
var result = objectSet2.filter((obj2)=>objetSet1.filter((obj1)=>obj1.id==obj2.ObjectId).length>0)
console.log(result);
请注意obj1.id==obj2.ObjectId
比较。当内部过滤器上的正匹配计数大于零时,它返回 true。那么这就是外部过滤器的答案。
您可以从第一个数组创建一组 ID:
const ids = new Set(objectSet1.map(object => object.id));
然后你可以检查第二个数组中的对象是否在那个集合中
ids.has(object.ObjectId)
这以我认为更清晰的方式结合了 Jonas Wilms 和 Ictus 的回答,并且我对代码进行了注释,以便未来的读者了解正在做什么。
// Define Yoann Eddy's original two sets of objects, but as Arrays
let objectSet1 = [
{id: 12, name: 'Foo Bar', email: 'foo@bar.com'},
{id: 23, name: 'Bar Foo', email: 'bar@foo.com'},
{id: 61, name: 'Barbell', email: 'barbell@mail.com'},
{id: 45, name: 'Joe Ocean', email: 'joe@ocean.com'}
];
let objectSet2 = [
{ObjectId:15, name: 'someone', email: 'someone@mail.com'},
{ObjectId: 23, name: 'sometwo', email: 'sometwo@mail.com'},
{ObjectId: 72, name: 'seven ', email: 'seven@mail.com'},
{ObjectId: 23, name: 'five ', email: 'five@mail.com'}
];
// Get just the ID numbers from the first set
let ids = new Set(objectSet1.map(o => o.id));
// Filter the second set, keeping only the objects that have
// an object.ObjectId that is in the first set of IDs
let result = objectSet2.filter(o => ids.has(o.ObjectId));
console.log(result);
Ictus 的一体化生产线可以完成这项工作,但会更难维护,因为它更难被同事(或你未来的自己)理解