javascript - 求一个数组按属性分组的方法

查看:103
本文介绍了javascript - 求一个数组按属性分组的方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

var arr = [

{city: "上海", location: "浦东"},
{city: "上海", location: "静安"},
{city: "北京", location: "内环"},
{city: "北京", location: "五环"},
{city: "苏州", location: "苏州"},

];

arr按city分组的方法,谢谢!

返回一个数组
[
{city:"",location:[]}
]

解决方案

// 获取 {} 结构
const mapCityLoction = function(arr) {
    let cities = {};
    arr.forEach((address, index) => {
        let locations = cities[address.city] || [];
        locations.push(address.location);
        cities[address.city] = locations;
    })
    return cities;
}

// forEach 获取 [ {city: , location}] 结构
const mapCityLoction_new = function() {
    let newArr = [];
    arr.forEach((address, i) => {
        let index = -1;
        let alreadyExists = newArr.some((newAddress, j) => {
            if (address.city === newAddress.city) {
                index = j;
                return true;
            }
        });
        if (!alreadyExists) {
            newArr.push({
                city: address.city,
                location: [address.location]
            });
        } else {
            newArr[index].location.push(address.location);
        }
    });
    return newArr;
};

// reduce 获取 [ {city: , location}] 结构
const mapCityLoction_lastest = function() {
    return arr.reduce( (prev, current) => {
        let index = -1;
        prev.some((address, i) => {
            if (address.city === current.city) {
                index = i;
                return true;
            }
        });
        if (index > -1) {
            prev[index].location.push(current.location);
        } else {
            prev.push({
                city: current.city,
                location: [current.location]
            });
        }
        return prev;
    }, [])
};

这篇关于javascript - 求一个数组按属性分组的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆