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

如何从Car实例数组中按年份筛选并提取指定属性值?

按年份筛选车辆并提取指定属性数组

先给出基础的类定义与实例创建示例:

class Car {
  constructor(name, model, year) {
    this.name = name;
    this.model = model;
    this.year = year;
  }
}

class AllCar {
  constructor() {
    this.carList = [];
  }
  
  addCar(car) {
    this.carList.push(car);
  }
}

// 创建车辆实例并添加到AllCar
const car1 = new Car('丰田', '卡罗拉', 2014);
const car2 = new Car('本田', '思域', 2014);
const car3 = new Car('大众', '朗逸', 2015);

const allCars = new AllCar();
allCars.addCar(car1);
allCars.addCar(car2);
allCars.addCar(car3);

核心操作:筛选+提取属性

  • 提取2014年车辆的model数组
const filteredModels = allCars.carList
  .filter(car => car.year === 2014)
  .map(car => car.model);

console.log(filteredModels); // 输出: ['卡罗拉', '思域']
  • 提取2014年车辆的name数组
const filteredNames = allCars.carList
  .filter(car => car.year === 2014)
  .map(car => car.name);

console.log(filteredNames); // 输出: ['丰田', '本田']
  • 提取2014年车辆的name+model组合对象数组
const filteredCarData = allCars.carList
  .filter(car => car.year === 2014)
  .map(car => ({ name: car.name, model: car.model }));

console.log(filteredCarData); 
// 输出: [{ name: '丰田', model: '卡罗拉' }, { name: '本田', model: '思域' }]

封装到AllCar类复用

如果需要频繁使用这类操作,可以把逻辑封装进AllCar类:

class AllCar {
  constructor() {
    this.carList = [];
  }
  
  addCar(car) {
    this.carList.push(car);
  }
  
  // 按年份筛选并提取单个属性
  getCarsByYear(year, prop) {
    return this.carList
      .filter(car => car.year === year)
      .map(car => car[prop]);
  }
  
  // 按年份筛选并提取name+model
  getCarNamesAndModelsByYear(year) {
    return this.carList
      .filter(car => car.year === year)
      .map(car => ({ name: car.name, model: car.model }));
  }
}

// 调用封装方法
console.log(allCars.getCarsByYear(2014, 'model')); // ['卡罗拉', '思域']
console.log(allCars.getCarNamesAndModelsByYear(2014)); // 输出组合对象数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:40:20