基于javascript/react中属性的过滤器数组
您好,我需要筛选具有相同地址的公司(阵列),并创建如下阵列:基于javascript/react中属性的过滤器数组,javascript,arrays,reactjs,for-loop,javascript-objects,Javascript,Arrays,Reactjs,For Loop,Javascript Objects,您好,我需要筛选具有相同地址的公司(阵列),并创建如下阵列: [{address:uniqueaddress1,organization:[company1,company2]}, {address:uniqueaddress2,organization:[company3,company4] .....] 我正在使用以下代码: var organizations = []; var dataPoints = []; for (var i = 0; i < com
[{address:uniqueaddress1,organization:[company1,company2]},
{address:uniqueaddress2,organization:[company3,company4]
.....]
我正在使用以下代码:
var organizations = [];
var dataPoints = [];
for (var i = 0; i < companies.length; i++) {
for (var j = 0; j < companies.length; j++) {
if (i === j) continue;
if (companies[j].address === companies[i].address) {
organizations.push(companies[j]);
companies[j].added = true; //To mark it is added
}
dataPoints.push({address:companies[j].address, organizations: companies[j]});
}
}
您可以使用一种稍微好一点的方法来实现这一点(尽管您也可以像前面所做的那样对数组数组使用这种方法)。您还可以删除内部循环,以获得更大的结果集,从而获得更高的效率,只需在执行过程中进行添加,而不是针对每个地址再次循环
let original = [
{ address: '123 Example Street', id: 1 },
{ address: '123 Example Street', id: 2 },
{ address: '456 Example Street', id: 3 }
];
let grouped = new Map();
original.forEach(function(company) {
let companies = grouped.get(company.address);
// If we already have the key, then just push into the array.
if (companies !== undefined) {
companies.push(company);
}
else {
// ...if not then create a new array.
companies = [company];
}
grouped.set(company.address, companies);
});
如果您习惯使用
ES6
语法,那么可以使用filter
和map
方法。下面的代码对数组进行过滤,使用map
方法创建一个临时数组,然后使用indexOf
方法检查是否可以在映射中包含相同的对象
let companys=[{
“添加”:正确,
“地址”:“样本地址1”,
“id”:258,
“纬度”:90.90227,
“经度”:12.538208,
“名称”:“公司名称1”
}, {
“添加”:正确,
“地址”:“样本地址1”,
“id”:258,
“纬度”:90.90227,
“经度”:12.538208,
“名称”:“公司名称1”
}, {
“添加”:正确,
“地址”:“样本地址2”,
“id”:258,
“纬度”:90.90227,
“经度”:12.538208,
“名称”:“公司名称1”
}, {
“添加”:正确,
“地址”:“样本地址2”,
“id”:258,
“纬度”:90.90227,
“经度”:12.538208,
“名称”:“公司名称1”
}]
函数唯一数组(数组,道具){
返回数组。过滤器((obj、pos、arr)=>{
返回arr.map(mapObj=>mapObj[prop]).indexOf(obj[prop])==pos;
});
}
console.log(uniqueArray(companys,“address”))
原始数组是什么?@Ted编辑的问题稍等!这不是优步的代码战斗机器人吗?哈哈桑克:谢谢你的答复。当我使用React项目时,您能指导如何将公司推到数据点吗?在这种情况下,使用React不应该有什么区别,您在这里只处理本机JavaScript。本例中的分组的映射将包含与您放入数据点
数组中相同的数据。我认为这将是O(N²),对吗filter
将遍历所有项目,map
?@TomDavies yesfilter
和map
将遍历所有项目
let original = [
{ address: '123 Example Street', id: 1 },
{ address: '123 Example Street', id: 2 },
{ address: '456 Example Street', id: 3 }
];
let grouped = new Map();
original.forEach(function(company) {
let companies = grouped.get(company.address);
// If we already have the key, then just push into the array.
if (companies !== undefined) {
companies.push(company);
}
else {
// ...if not then create a new array.
companies = [company];
}
grouped.set(company.address, companies);
});