![](/img/trans.png)
[英]JS - Filter an array of objects for duplicates of one property, and decide which object to keep based on another property
[英]How to filter few properties of an object which is in Array of objects if one property equals property from another object
我有一个 object,它具有一个用户的一些属性,并且我有从 API 返回的对象数组。 我的目标是检查对象数组中的哪个 object 与单个初始 object 具有相同的属性,然后它应该只返回部分属性。 我曾尝试在对象数组上使用.map,但它似乎不起作用。
下面是代码示例。 如果您愿意,我还准备了代码沙盒。
const user =
{
name: "jan",
lastName: "kowalski",
fullName: "jan kowalski",
car: "audi"
}
;
const usersAnimal = [
{
name: "jan",
lastName: "kowalski",
fullName: "jan kowalski",
animal: "cat",
animalSize: "small",
animalName: "Bat"
},
{
name: "john",
lastName: "smith",
fullName: "john smith",
animal: "dog",
animalSize: "middle",
animalName: "Jerry"
},
{
name: "Anna",
lastName: "Nilsson",
fullName: "Anna Nilsson",
animal: "cow",
animalSize: "big",
animalName: "Dorrie"
}
];
const filtered = usersAnimal.map((userAnimal)=>userAnimal.fullName === user.fullName && return userAnimal.animalName & userAnimal.animalSize & userAnimal.animal);
谢谢
https://codesandbox.io/s/admiring-edison-qxff42?file=/src/App.js
对于这种情况,如果您先将其过滤掉,然后使用 map 继续操作,会容易得多:
const filtered = usersAnimal
.filter((animal) => animal.fullName === user.fullName)
.map(({ animalName, animalSize, animal }) => {
return {
animalName,
animalSize,
animal
};
});
如果要过滤,我建议您使用filter 。
map方法会创建一个新数组,其内容是原数组每个元素在回调function操作后返回的结果集合
const user = {name:"jan",lastName:"kowalski",fullName:"jan kowalski",car:"audi"}; const usersAnimal = [{name:"jan",lastName:"kowalski",fullName:"jan kowalski",animal:"cat",animalSize:"small",animalName:"Bat"},{name:"john",lastName:"smith",fullName:"john smith",animal:"dog",animalSize:"middle",animalName:"Jerry"}]; // Get an array of matching objects let filtered = usersAnimal.filter(o => o.fullName === user.fullName); // You get the filtered array, then you can get the required properties filtered.forEach(o => { console.log( 'animal:%s, animalSize:%s, animalName:%s', o?.animal, o?.animalSize, o?.animalName ); }); // Then use map to process each element filtered = filtered.map(o => { const {animal, animalSize, animalName} = o; return {animal, animalSize, animalName}; }); console.log('filtered', filtered);
我提供了一个 for 循环解决方案,因为我还没有在 javascript 中学习很多数组方法。
对我来说,最简单的选择是使用 for 循环和 if 检查循环遍历 arrays 值以检查包含的值。
for (let v in usersAnimal) {
if (usersAnimal[v].fullName === user.fullName) {
console.log(usersAnimal[v])
}
}
上面的代码将记录整个 usersAnimal object 包含我们正在寻找的全名。
{
name: 'jan',
lastName: 'kowalski',
fullName: 'jan kowalski',
animal: 'cat',
animalSize: 'small',
animalName: 'Bat'
}
评论以进一步理解
for (let v in usersAnimal) {
//loops though the array
if (usersAnimal[v].fullName === user.fullName) {
//when the index value 'v' has a fullname that matches the user fullname value
// it passes the if check and logs that object value
return console.log(usersAnimal[v])
//return true...
}
//return null
}
//etc
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.