【问题标题】:How to get the count of repeated key values of array object of consecutive elements?如何获取连续元素的数组对象的重复键值计数?
【发布时间】:2020-12-04 01:17:27
【问题描述】:

我有一个数组结构:-

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

我要数数。每个对象的纬度和经度都相同。它应该返回数组,因为它只是带有额外的计数键。 例如 - 预期结果

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)

但这会返回具有计数的元素的唯一对象。我希望每个对象都具有键数。

【问题讨论】:

    标签: javascript node.js arrays object


    【解决方案1】:

    您可以使用一个对象来计算出现次数并将计数映射到相同的位置。

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

    【讨论】:

    • @nina-scholz 它没有按预期结果工作,它仍然返回带有计数的唯一对象。
    • 就像你如何使用 CSS 来放大 console.log 显示以获得更多可见性。
    • @pse,它现在应该可以按需要工作了。你需要两个循环。
    猜你喜欢
    • 1970-01-01
    • 2019-07-27
    • 2019-12-09
    • 2021-12-10
    • 2018-10-03
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多