簡體   English   中英

如何獲取數組object連續元素的重復鍵值計數?

[英]How to get the count of repeated key values of array object of consecutive elements?

我有一個數組結構:-

 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"
}]

我要數數。 每個 object 中經緯度的次數相同。 它應該返回數組,因為它只是帶有額外的計數鍵。 例如-預期結果

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)

但這會返回具有計數的元素的唯一對象。 我想要每個 object 與密鑰計數一樣。

您可以使用 object 對出現次數進行計數,並將 map 計數到相同的位置。

 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; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM