在 underscore.js 中,pluck 方法可以获取一个对象数组中指定的属性值组成的数组。但如果需要在此基础上进行进一步筛选并获取多列数据时,我们可以借鉴 LINQ 的 Select 投影方法来实现。
首先,假设我们有如下对象数组:
const data = [ { name: 'Alice', age: 25, gender: 'female' }, { name: 'Bob', age: 30, gender: 'male' }, { name: 'Charlie', age: 35, gender: 'male' } ];
如果我们只想获取其中的姓名和年龄两列数据,可以使用 pluck 并结合 map 方法来实现:
const result = _.map(data, obj => _.pick(obj, ['name', 'age'])); // result: [{ name: 'Alice', age: 25 }, { name: 'Bob', age: 30 }, { name: 'Charlie', age: 35 }]
但这种方式较为繁琐,我们可以使用 where 和 pluck 方法结合起来,先筛选出符合条件的对象,再获取所需的多列数据。具体示例代码如下:
const result = _.chain(data) .where(obj => obj.gender === 'male') .pluck('name', 'age') .value(); // result: [['Bob', 30], ['Charlie', 35]]
这里使用了 underscore.js 提供的链式语法,通过 where 方法筛选出 gender 为 male 的对象,再使用 pluck 方法获取对应的 name 和 age 两列数据,最终得到一个二维数组。
这种方式虽然更加简洁,但需要注意的是 pluck 方法只能获取单列数据或者多个相邻的列数据。如果需要获取非相邻的多列数据,建议使用 map 方法结合对象解构来实现。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/25853