Javascript 按重复项和计数对zipcode进行分组

Javascript 按重复项和计数对zipcode进行分组,javascript,Javascript,我想按重复值对zipcode进行分组。我有一个包含重复项的zipcodes数组 var ArrayOfZipCodes = [{"zipCode" : "12345"},{"zipCode" : "24567"}, {"zipCode" : "24567"}, {"zipCode" : "24567"} , {"zipCode" : "02895"} , {"zipCode" : "02861"} , {"zipCode" : "02895"}] 需要的输出: sorting

我想按重复值对zipcode进行分组。我有一个包含重复项的zipcodes数组

var ArrayOfZipCodes = [{"zipCode" : "12345"},{"zipCode" : "24567"}, {"zipCode" : "24567"}, 
       {"zipCode" : "24567"} , {"zipCode" : "02895"} , {"zipCode" : "02861"} , {"zipCode" : "02895"}] 
需要的输出:

sorting the zipCodes and then grouping it.

var finalOutput = [{"zipCode" : "12345", from: "1"},{"zipCode" : "24567", from: "2 - 4"},
           {"zipCode" : "02861", from: "5"}, {"zipCode" : "02895", from: "6-7"} ] 
以下是我的实现:

ArrayOfZipCodes.sort(function(a, b) {
    return a['zipCode'] - b['zipCode'];
});

ArrayOfZipCodes.forEach((item, index) => (item['id'] = index + 1));

const lookup = zipCodes.reduce((a, e) => {
    a[e['zipCode']] = ++a[e['zipCode']] || 0;
    return a;
}, {});

let group = ArrayOfZipCodes.filter(e => lookup[e['zipCode']]);

const filteredArr = group.reduce((acc, current, currentIndex, array) => {
    const x = acc.find(item => item['zipCode'] === current['zipCode']);
    if (x) {
        acc[0]['from'] = x['id'] + "-" + (array.length + 1);
    }
    return acc.concat([current]);

}, []);

var uniq = {}

var arrFiltered = ArrayOfZipCodes.filter(obj => !uniq[obj['zipCode']] && (uniq[obj['zipCode']] = true));

let finalArr = arrFiltered.concat(filteredArr);
console.log("finalArr", finalArr)

当我运行时,我得到,
[circular object]
而不是上面提到的输出。

我认为这应该满足您的要求

const arrayOfZipCodes=[
{zipCode:“12345”},
{zipCode:“24567”},
{zipCode:“24567”},
{zipCode:“24567”},
{zipCode:“02895”},
{zipCode:“02861”},
{zipCode:“02895”},
];
const sortedZipCodes=arrayOfZipCodes.map(z=>z.zipCode.sort();
常量输出=[…新集合(SORTEDZIPCODE)].map(zipCode=>{
const first=sortedZipCodes.indexOf(zipCode);
const last=sorteddzipcodes.lastIndexOf(zipCode);
常量from=first==last?`${first}`:`${first}-${last}`;
返回{zipCode,from};
});

控制台日志(输出)
来自的
值在输出中重要吗?您需要知道每个邮政编码的实例数吗?原始阵列中的位置,以便您以后可以访问它们?或者是你正在显示你真正需要的格式的字符串?from很重要,因为我用它来指向地图。。。聚集相似的ZipCodes为什么从is
6-7
开始
02895
?谢谢,计数可以从1开始而不是从零开始吗。“const from=first===last?
${first+1}
${first+1}-${last+1}
;”[…新集合(sortedZipCodes)],此行引发错误。。。是否有一种方法可以使用替代方法
sortedZipCodes
的值是多少?它应该是一个已排序的字符串数组(zipcodes)。原始格式的对象数组,指针属性作为加法附加,…新集合在代码中引发错误。。。我猜它正在删除重复项。。。