繁体   English   中英

通过循环从另一个数组在js中创建多维数组

[英]create multidimensional array in js from another array through a loop

自从我不得不在 js 中做这样的事情并且遇到一些麻烦以来已经有一段时间了。

基本上,我循环遍历一个包含 ip_address、城市、位置、邮政和国家/地区的数组。 给定的 ip_address 将始终具有相同的城市、位置、邮政和国家/地区值。 在我的循环中,我想创建一个新数组,它删除重复项并创建一个“总计”值来跟踪结果中 ip_address 的次数。

我有一种感觉,我一直在与 php 打交道,因为这不一样,但无法获得我想要的东西。 我希望grouped的结果是 ip_address 值,然后能够调用grouped['ip_address']['city']等等以获得该 ip 的其他值。

    //loop through dt results and create an array of grouped ip addresses
    var grouped = [];
    dt.rows().every(function() {
        var data = this.data();             
        grouped['ip_address'] = data['ip_address'];
        grouped['ip_address']['city'] = data['city'];
        grouped['ip_address']['location'] = data['location'];
        grouped['ip_address']['postal'] = data['postal'];
        grouped['ip_address']['country'] = data['country'];
        grouped['ip_address']['total'] = grouped['ip_address']['total'] ? grouped['ip_address']['total'] + 1 : 1;
    });

    console.log(grouped);

示例数据:

ip_address  "111.111.111.111"
city    "Miami"
location    "Florida"
postal  "12458"
country "USA"

ip_address  "222.222.222.222"
city    "Orlando"
location    "Florida"
postal  "12423"
country "USA"

ip_address  "111.111.111.111"
city    "Miami"
location    "Florida"
postal  "12458"
country "USA"

...

我想要的结果:

ip_address  "111.111.111.111"
   city "Miami"
   location "Florida"
   postal   "12458"
   country  "USA"
   total  "2"

ip_address  "222.222.222.222"
   city "Orlando"
   location "Florida"
   postal   "12423"
   country  "USA"
   total   "1"

   ...

你似乎想要类似的东西

var grouped=new Map();
dt.rows().every(function(){
  let data=this.data;
  let ip=data.ip_address;
  if(grouped.has(ip))
    grouped.get(ip).total++;
  else
    grouped.set(data.ip_address,{
      ip_address:data.ip_address,
      city:data.city,
      ...
      country:data.country,
      total:0
    });
}

但不确定,只是猜测,我无法从问题中解码total的作用。

这应该很容易

//loop through dt results and create an array of grouped ip addresses
var grouped = [];
dt.rows().every(function() {
  var data = this.data();
  var item = {};
  // If the item with the same ipaddress already exist in (grouped) then append total, else push new item to (grouped).
  var foundItem = grouped.find((a) => a.ip_address == data.ip_address);
  if (foundItem)
    foundItem.total += 1;
  else {
    item.ip_address = data['ip_address'];
    item.city = data['city'];
    item.location = data['location'];
    item.postal = data['postal'];
    item.country = data['country'];
    item.total = 1;
    grouped.push(item);
  }

});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM