我有一个数组结构:-
var location = [ {
"latitude" : 21.112,
"longitude" : 79.07,
"time" : "8:13AM",
"time1" : "8:13AM"
},
{
"latitude" : 21.111,
"longitude" : 79.07,
"time" : "8:20AM",
"time1" : "8:20AM"
},
{
"latitude" : 21.111,
"longitude" : 79.07,
"time" : "8:34AM",
"time1" : "8:34AM"
},
{
"latitude" : 21.111,
"longitude" : 79.07,
"time" : "8:41AM",
"time1" : "8:41AM"
},
{
"latitude" : 21.109,
"longitude" : 79.07,
"time" : "8:48AM",
"time1" : "8:48AM"
},
{
"latitude" : 21.108,
"longitude" : 79.07,
"time" : "8:55AM",
"time1" : "8:55AM"
},
{
"latitude" : 21.108,
"longitude" : 79.069,
"time" : "9:02AM",
"time1" : "9:02AM"
},
{
"latitude" : 21.107,
"longitude" : 79.069,
"time" : "9:09AM",
"time1" : "9:09AM"
},
{
"latitude" : 21.106,
"longitude" : 79.069,
"time" : "9:16AM",
"time1" : "9:16AM"
},
{
"latitude" : 21.105,
"longitude" : 79.069,
"time" : "9:23AM",
"time1" : "9:23AM"
},
{
"latitude" : 21.104,
"longitude" : 79.069,
"time" : "9:30AM",
"time1" : "9:30AM"
},
{
"latitude" : 21.105,
"longitude" : 79.069,
"time" : "9:37AM",
"time1" : "9:37AM"
},
{
"latitude" : 21.105,
"longitude" : 79.07,
"time" : "9:44AM",
"time1" : "9:44AM"
},
{
"latitude" : 21.105,
"longitude" : 79.071,
"time" : "9:51AM",
"time1" : "9:51AM"
},
{
"latitude" : 21.106,
"longitude" : 79.072,
"time" : "9:58AM",
"time1" : "9:58AM"
}]
我要数不行。每个对象的经度和纬度时间相同。它应该仅使用附加的count键返回数组。对于例如-预期结果
var location = [ {
"latitude" : 21.112,
"longitude" : 79.07,
"time" : "8:13AM",
"time1" : "8:13AM",
"count":1
},
{
"latitude" : 21.111,
"longitude" : 79.07,
"time" : "8:20AM",
"time1" : "8:20AM",
"count":3
},
{
"latitude" : 21.111,
"longitude" : 79.07,
"time" : "8:34AM",
"time1" : "8:34AM",
"count":3
},
{
"latitude" : 21.111,
"longitude" : 79.07,
"time" : "8:41AM",
"time1" : "8:41AM",
"count":3
},..]
我已经尝试过此代码-
const resultarray = Object.values(location.reduce((a, b) => {
a[b.latitude + b.longitude] = Object.assign(b, {count: (a[b.latitude + b.longitude] || {count: 0}).count + 1});
return a;
}, {}));
console.log(resultarray)
但这会返回带有count的元素的唯一对象。我希望每个对象都具有关键计数。
您可以使用一个对象来计数发生次数,然后将计数映射到相同的位置。
const
getKey = o => ['latitude', 'longitude'].map(k => o[k]).join('|'),
locations = [{ latitude: 21.112, longitude: 79.07, time: "8:13AM", time1: "8:13AM" }, { latitude: 21.111, longitude: 79.07, time: "8:20AM", time1: "8:20AM" }, { latitude: 21.111, longitude: 79.07, time: "8:34AM", time1: "8:34AM" }, { latitude: 21.111, longitude: 79.07, time: "8:41AM", time1: "8:41AM" }, { latitude: 21.109, longitude: 79.07, time: "8:48AM", time1: "8:48AM" }, { latitude: 21.108, longitude: 79.07, time: "8:55AM", time1: "8:55AM" }, { latitude: 21.108, longitude: 79.069, time: "9:02AM", time1: "9:02AM" }, { latitude: 21.107, longitude: 79.069, time: "9:09AM", time1: "9:09AM" }, { latitude: 21.106, longitude: 79.069, time: "9:16AM", time1: "9:16AM" }, { latitude: 21.105, longitude: 79.069, time: "9:23AM", time1: "9:23AM" }, { latitude: 21.104, longitude: 79.069, time: "9:30AM", time1: "9:30AM" }, { latitude: 21.105, longitude: 79.069, time: "9:37AM", time1: "9:37AM" }, { latitude: 21.105, longitude: 79.07, time: "9:44AM", time1: "9:44AM" }, { latitude: 21.105, longitude: 79.071, time: "9:51AM", time1: "9:51AM" }, { latitude: 21.106, longitude: 79.072, time: "9:58AM", time1: "9:58AM" }],
counts = locations.reduce((r, o) => {
const key = getKey(o);
r[key] = (r[key] || 0) + 1;
return r;
}, {}),
result = locations.map(o => ({ ... o, count: counts[getKey(o)] }));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句