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

Angular中动态对比数组提取指定键值:无法推送数组值问题

解决Angular中筛选数组键生成新数组的问题

我明白你的需求啦——就是从关联数组B里筛选出常规数组A指定的那些键,生成只包含这些键值对的新数组C对吧?其实这个需求在JavaScript/TypeScript里实现起来很简单,我给你两种常用的方法,你可以根据自己的习惯选:

方法一:map + reduce(兼容性好,逻辑清晰)

这种方法通过遍历数组B的每个对象,再用reduce逐个提取A中指定的键值对,构建新对象:

// 你的原始数组
const arrayA = ['Stock_Number', 'Model', 'Type', 'Bill_Number'];
const arrayB = [
  { 
    'Stock_Number': 'GTH738', 
    'Model': 'sample_model', 
    'Type': 'sample_type', 
    'Bill_Number': 7784754, 
    'some_prop1': 'prop1_val', 
    'some_prop2': 'prop2_val' 
  }
];

// 生成目标数组C
const arrayC = arrayB.map(item => {
  return arrayA.reduce((acc, key) => {
    // 可选:先判断原对象是否包含该键,避免不存在的键报错
    if (item.hasOwnProperty(key)) {
      acc[key] = item[key];
    }
    return acc;
  }, {} as {[key: string]: any});
});

运行后arrayC就会只保留A中指定的键,完全符合你的要求。

方法二:map + Object.fromEntries(更简洁)

如果你喜欢更简洁的写法,可以用Object.fromEntries来快速构建过滤后的对象:

const arrayC = arrayB.map(item => {
  return Object.fromEntries(
    // 先过滤出A中存在于当前对象的键,再转成[key, value]格式的数组
    arrayA.filter(key => item.hasOwnProperty(key)).map(key => [key, item[key]])
  );
});

(可选)TypeScript类型优化

如果你的项目是TypeScript,想要更严格的类型检查,可以给目标数组定义接口:

// 定义筛选后的对象类型
interface FilteredItem {
  Stock_Number: string;
  Model: string;
  Type: string;
  Bill_Number: number;
}

// 生成带类型的数组C
const arrayC: FilteredItem[] = arrayB.map(item => {
  return arrayA.reduce((acc, key) => {
    acc[key as keyof FilteredItem] = item[key];
    return acc;
  }, {} as FilteredItem);
});

这样代码会更健壮,编辑器也能给出准确的类型提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:17:05