【问题标题】:How to get the last element from array while comparing current element with next element?如何在比较当前元素和下一个元素时从数组中获取最后一个元素?
【发布时间】:2018-08-06 10:03:00
【问题描述】:

我有一个包含键值对的数组。键是 (ID,Lat,Lon)。

我想要做的是将当前元素 ID 与下一个元素 ID 进行比较,如果它们相等,则将当前元素的纬度和经度放入一个对象(在我的情况下为“点”)并调用一个函数(InjectIntoArray 在那初始化全局数组 points[]) 的点。

当条件变为假时(即当前 id 不等于下一个 id),在其他部分中,我将当前元素 Lat 和 Lon 放入一个对象并在该对象上调用一个函数,这是因为下一个元素的 ID 正在要与众不同,我必须获取当前元素 ID 的所有纬度和经度。

在检查最后一个元素时出现问题,它在没有获取最后一条记录的情况下退出。(即list[lastElement])。

如何获得所有元素的纬度和经度?有没有更好的方法来实现这一点?

这是我的数组 -

var list = [
            { id: 100, Lat: 19.25, Lon: 74}, { id: 100, Lat: 19.79, Lon: 74.19 }, 
            { id: 101, Lat: 19.99, Lon:75.10 }, { id: 101, Lat: 20.37, Lon:68.9}, 
            { id: 119, Lat: 17, Lon: 70 }, { id: 107, Lat: -16, Lon: -165 }, 
            { id: 107, Lat: -15, Lon: -150 }
           ];

还有代码-

 for (let i = 0; i < list.length - 1;i++) {
                        if (list[i].id == list[i+1].id) {
                            var point = { LATITUDE: list[i].Lat, LONGITUDE: list[i].Lon };
                            InjectIntoArray(point);
                        }
                        else {
                            var point = { LATITUDE: list[i].Lat, LONGITUDE: list[i].Lon };
                            InjectIntoArray(point);
                            plotRoute(false,2);
                            points = [];
                        }

                    }

【问题讨论】:

  • 正确地提出问题。
  • 应该采取什么立场?
  • 请阅读How to Ask,向我们展示您迄今为止所做的尝试,并具体说明您遇到的问题。

标签: javascript arrays for-loop iteration arrow-functions


【解决方案1】:
obj = [     { id: 100, Lat: 19.25, Lon: 74}, { id: 100, Lat: 19.79, Lon: 74.19 }, 
            { id: 101, Lat: 19.99, Lon:75.10 }, { id: 101, Lat: 20.37, Lon:68.9}, 
            { id: 119, Lat: 17, Lon: 70 }, { id: 107, Lat: -16, Lon: -165 }, 
            { id: 107, Lat: -15, Lon: -150 }
      ];
pivot = obj.reduce((acc,item) => {
    let {id,Lat,Lon} = item;
    if(!acc[id]) acc[id]= [];
    acc[item.id].push({Lat, Lon});
    return acc;
},{});

Object.keys(pivot).forEach((id) => {
    pivot[id].forEach(coords => {
        fn(coords.Lat,coords.Lon,id) //call your function here;
    });
});

【讨论】:

  • 感谢您的回复,但由于 Object.keys(pivot) 显示为未定义,您的 forEach on pivot 无法正常工作。但是我已经改写了我的问题,请看一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
相关资源
最近更新 更多