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

如何使用Lodash或Array Reduce方法按location属性分组指定对象数组

按location分组数组的两种实现方案

嘿,我来给你详细讲讲怎么实现这个按location属性分组的需求,两种实用方法都安排上——用Lodash工具库或者原生JS的Array.reduce,都能完美搞定!

先明确下我们的输入数组:

const readings = [
  { location: { lat: '21.4', lng: '23.5' }, vehicle: 'sdkhf', id:'1' },
  { location: { lat: '22.4', lng: '25.5' }, vehicle: 'sdkhf', id:'2' },
  { location: { lat: '21.4', lng: '23.5' }, vehicle: 'sdkhf', id:'3' },
  { location: { lat: '22.4', lng: '25.5' }, vehicle: 'sdkhf', id:'2' },
  { location: { lat: '28.4', lng: '21.5' }, vehicle: 'sdkhf', id:'5' },
];

我们要得到的结果是一个对象数组,每个对象包含location属性(对应分组的位置)和points数组(存储所有同位置的原数组元素)。


方法一:使用Lodash快速实现

Lodash的_.groupBy方法是分组的利器,但因为location是引用类型的对象,直接用它做分组键会按对象引用判断,所以我们需要先把location转成唯一的字符串(比如用JSON.stringify),再进行分组,最后转换成目标格式:

// 先确保已经引入Lodash
const _ = require('lodash');

// 1. 按location的字符串形式分组,得到键为location字符串的对象
const groupedData = _.groupBy(readings, item => JSON.stringify(item.location));

// 2. 把分组结果转换成目标格式的数组
const finalResult = Object.values(groupedData).map(group => ({
  location: group[0].location, // 同一组的location都相同,取第一个即可
  points: group
}));

console.log(finalResult);

方法二:使用原生Array.reduce实现(无需额外依赖)

如果不想引入第三方库,用原生JS的reduce方法也能实现,思路和上面一致:先构建一个临时的分组对象,最后再转换成目标数组:

const finalResult = Object.values(
  readings.reduce((acc, currentItem) => {
    // 生成唯一的分组键:把location对象转成字符串
    const locationKey = JSON.stringify(currentItem.location);
    
    // 如果当前键还没在临时对象里,初始化一个空数组
    if (!acc[locationKey]) {
      acc[locationKey] = [];
    }
    
    // 将当前元素加入对应分组
    acc[locationKey].push(currentItem);
    
    return acc;
  }, {}) // reduce的初始值是一个空对象,用于存储分组
).map(group => ({
  location: group[0].location,
  points: group
}));

console.log(finalResult);

两种方法最终得到的结果完全一致,结构如下:

[
  {
    location: { lat: '21.4', lng: '23.5' },
    points: [
      { location: { lat: '21.4', lng: '23.5' }, vehicle: 'sdkhf', id:'1' },
      { location: { lat: '21.4', lng: '23.5' }, vehicle: 'sdkhf', id:'3' }
    ]
  },
  {
    location: { lat: '22.4', lng: '25.5' },
    points: [
      { location: { lat: '22.4', lng: '25.5' }, vehicle: 'sdkhf', id:'2' },
      { location: { lat: '22.4', lng: '25.5' }, vehicle: 'sdkhf', id:'2' }
    ]
  },
  {
    location: { lat: '28.4', lng: '21.5' },
    points: [
      { location: { lat: '28.4', lng: '21.5' }, vehicle: 'sdkhf', id:'5' }
    ]
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:03:12