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
相关产品推荐
相关产品推荐

