透视或转换JavaScript对象

透视或转换JavaScript对象,javascript,json,Javascript,Json,我有以下JavaScript对象。我需要从给定对象生成一个新对象。在JavaScript中我应该采取什么方法 [ {"name": "Dan", "city" : "Columbus", "ZIP":"47201"}, {"name": "Jen", "city" : "Columbus", "ZIP":"47201"}, {"name": "Mark", "city" : "Tampa", "ZIP":"33602"}, ] 如何变换或旋转以生成以下对象 [ { "47201"

我有以下JavaScript对象。我需要从给定对象生成一个新对象。在JavaScript中我应该采取什么方法

[
 {"name": "Dan",  "city" : "Columbus", "ZIP":"47201"},
 {"name": "Jen",  "city" : "Columbus", "ZIP":"47201"},
 {"name": "Mark", "city" : "Tampa",  "ZIP":"33602"},
]
如何变换或旋转以生成以下对象

[
 { "47201": [
              {"name": "Dan", "city": "Columbus"},
              {"name": "Jen", "city": "Columbus"},
             ],
    "count": "2"
  },
  { "33602": [
              {"name": "Mark", "city": "Tampa"}
             ],
    "count": "1"
  }
 ]

我不知道您为什么需要.count属性,因为它可以通过数组的.length属性访问,但无论如何:

常量输入=[ {姓名:丹,城市:哥伦布,邮编:47201}, {姓名:Jen,城市:哥伦布,邮编:47201}, {姓名:马克,城市:坦帕,邮编:33602}, ] const working=input.reduceac,{ZIP,name,city}=>{ acc[ZIP]| | acc[ZIP]=[]按{name,city} 返回acc }, {} 常量输出=Object.keysworking .mapk=>{[k]:工作[k],计数:工作[k].length}
console.logoutput下面的代码将满足您的要求。最终结果存储在保存数组对象的变量result中

    var source = [{
            "name": "Dan",
            "city": "Columbus",
            "ZIP": "47201"
        },
        {
            "name": "Mark",
            "city": "Tampa",
            "ZIP": "33602"
        },
        {
            "name": "Jen",
            "city": "Columbus",
            "ZIP": "47201"
        }
    ];

    var result = [];
    finalarr('ZIP');

    function finalarr(propname) {
        var obj = JSON.parse(JSON.stringify(source));

        obj.forEach(function(elm,i) {
            var arr = {};var chli=[];var charr={};
            var flag = 0;

            for (var prop in elm) {
                if(prop != propname){
                    charr[prop]=elm[prop];
                }
            }

            for(var i=0;i<result.length;i++){
                if(result[i][elm[propname]]){
                    result[0][elm[propname]].push(charr);
                    //console.log(result[i][propname]);
                    flag = 1;
                }
            }

            if(flag == 0){
                chli.push(charr);
                arr["count"] = checkarr(obj,propname,elm[propname]);        
                arr[elm[propname]]=chli;
                result.push(arr);
            }
        });
    }

    function checkarr(obj,propname,value){
        var count = 0;
        obj.forEach(function(elm,i) {
            if(elm[propname] == value){
                count++;
            }
        });

        return count;
    }

console.log(result);

乍一看,预期的产出没有多大意义。如果将其简化为一个对象,以邮政编码作为键,以名称/城市对象数组作为值,则更符合逻辑。count属性可以很容易地从数组长度中派生。搜索javascript group by.Thank。它起作用了。谢谢你提供的关于进一步阅读的提示。