如何从现有JSON列表中提取指定字段生成新的JSON列表?
嘿,这个需求其实用JavaScript里的Array.map()方法就能完美解决,不仅代码简洁,而且是批量处理,完全适合你说的数万个对象的场景,根本不用手动循环逐个push~
方法一:直接构造目标对象(适合固定字段)
针对你给出的测试数据,直接用map遍历原数组,每次返回只包含id和age的新对象就行:
// 原数据 $scope.TestList = [ {id: 1, name: 'Bob', age: 23, bio: 'Duck Toaster'}, {id: 2, name: 'Tom', age: 69, bio: 'Banana Sharks'} ]; // 提取指定字段生成新列表 $scope.NewTestList = $scope.TestList.map(item => ({ id: item.id, age: item.age }));
运行这段代码后,$scope.NewTestList就会完全符合你的预期。map()是JS原生的数组方法,会自动遍历原数组的每一项,返回一个全新的数组,每一项都是你自定义的新对象,性能经过底层优化,对付大数据量毫无压力。
方法二:动态指定字段(更灵活)
如果你的目标字段是固定的(比如你提到的"IdApplication"和"AccountNumber"),但想让代码更通用,也可以把要提取的字段放在一个数组里,动态生成新对象:
// 定义你需要提取的固定字段 const targetFields = ["IdApplication", "AccountNumber"]; // 批量生成新列表 $scope.NewTestList = $scope.TestList.map(item => { const newObj = {}; targetFields.forEach(field => { newObj[field] = item[field]; }); return newObj; });
这种方式的好处是,以后如果需要调整提取的字段,只需要修改targetFields数组就行,不用改动核心逻辑,特别适配你说的CSV列不固定、但目标字段固定的场景。
关于你之前尝试的.push()方法
你之前用循环+.push()没得到想要的结果,大概率是没在循环里创建新对象——如果每次循环时先构建一个只包含目标字段的新对象,再push到新数组,其实也能实现,但代码会比map繁琐很多,而且map的可读性和简洁性都更强,完全没必要手动写循环。
内容的提问来源于stack exchange,提问作者Vereonix
相关产品推荐
相关产品推荐

