[英]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.