You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从对象数组中筛选与指定对象属性匹配的对象的指定属性

问题:匹配用户并提取指定属性

我有一个存储单个用户属性的对象,还有一个API返回的对象数组。需要找到数组中与单个对象的fullName属性匹配的对象,只返回该对象的animal、animalSize、animalName这几个属性。尝试用.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);

解决方案

原代码问题分析

  1. .map方法不适用:.map会遍历数组所有元素并返回对应结果,最终得到和原数组长度一致的新数组,不符合“只返回匹配对象”的需求。
  2. 语法错误:箭头函数中&& return写法不正确,若要使用return需包裹在花括号内;另外&是位运算符,不能用来组合对象属性,应该返回包含指定属性的对象。

正确实现方式

先用.find找到匹配的对象(因为fullName通常是唯一标识,.find会返回第一个符合条件的元素),再提取需要的属性:

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"
  }
];

// 找到匹配fullName的对象
const matchedItem = usersAnimal.find(item => item.fullName === user.fullName);

// 提取指定属性,处理未找到匹配项的情况
const result = matchedItem ? {
  animal: matchedItem.animal,
  animalSize: matchedItem.animalSize,
  animalName: matchedItem.animalName
} : null;

console.log(result); // 输出:{ animal: 'cat', animalSize: 'small', animalName: 'Bat' }

简化写法(对象解构)

也可以用对象解构直接提取所需属性,让代码更简洁:

const result = matchedItem ? (({ animal, animalSize, animalName }) => ({ animal, animalSize, animalName }))(matchedItem) : null;

内容的提问来源于stack exchange,提问作者marcinb1986

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 01:24:28