Wen*_*Hou 5 javascript arrays split
我有一个这样的数组:
var flightPlanCoordinates = [
{ lat: 37.772, lng: -122.214, status: "walking" },
{ lat: 36.772, lng: -123.214, status: "walking" },
{ lat: 21.291, lng: -157.821, status: "automotive" },
{ lat: -18.142, lng: 178.431, status: "automotive" },
{ lat: -27.467, lng: 153.027, status: "walking" },
{ lat: -26.467, lng: 151.027, status: "walking" },
];
Run Code Online (Sandbox Code Playgroud)
我希望将其拆分为三个数组,这些数组具有相同类型的对象,如下格式:
[{lat: 37.772, lng: -122.214, status: 'walking'},
{lat: 36.772, lng: -123.214, status: 'walking'}]
[{lat: 21.291, lng: -157.821, status: 'automotive'},
{lat: -18.142, lng: 178.431, status: 'automotive'}]
[{lat: -27.467, lng: 153.027, status: 'walking'}
{lat: -26.467, lng: 151.027, status: 'walking'}]
Run Code Online (Sandbox Code Playgroud)
我不能只使用 groupBy 来处理这个问题,有什么想法吗?
如果状态发生变化,您可以使用Array#reduce()组更改。
var flightPlanCoordinates = [{ lat: 37.772, lng: -122.214, status: 'walking' }, { lat: 36.772, lng: -123.214, status: 'walking' }, { lat: 21.291, lng: -157.821, status: 'automotive' }, { lat: -18.142, lng: 178.431, status: 'automotive' }, { lat: -27.467, lng: 153.027, status: 'walking' }, { lat: -26.467, lng: 151.027, status: 'walking' }],
grouped = flightPlanCoordinates.reduce(function (r, a, i) {
if (!i || r[r.length - 1][0].status !== a.status) {
return r.concat([[a]]);
}
r[r.length - 1].push(a);
return r;
}, []);
document.write('<pre>' + JSON.stringify(grouped, 0, 4) + '</pre>');Run Code Online (Sandbox Code Playgroud)