Javascript 我如何计算某物在我的对象中出现的次数?

Javascript 我如何计算某物在我的对象中出现的次数?,javascript,jquery,json,object,Javascript,Jquery,Json,Object,我需要查看一个代码在海关密钥中出现的次数,然后在(名称:)下显示该代码,以及它在(数据:)中出现的次数。我想我很接近了,请看下面的片段。因此,当我控制台日志数据时,我只想看到类似-name:123213 data:22的内容 //这是我的json对象 var json=[ “G”:“PIF”, “H”:“离岸价”, “我”:“宁波”, “J”:“NGB”, “K”:“2014-10-01”, “M”:“2014-10-01”, “Y”:“利物浦”, “zp”:“LIV”, “N”:“2014-1

我需要查看一个代码在海关密钥中出现的次数,然后在(名称:)下显示该代码,以及它在(数据:)中出现的次数。我想我很接近了,请看下面的片段。因此,当我控制台日志数据时,我只想看到类似-name:123213 data:22的内容

//这是我的json对象
var json=[
“G”:“PIF”,
“H”:“离岸价”,
“我”:“宁波”,
“J”:“NGB”,
“K”:“2014-10-01”,
“M”:“2014-10-01”,
“Y”:“利物浦”,
“zp”:“LIV”,
“N”:“2014-11-09”,
“P”:“2014-11-09”,
“R”:“2014-11-09T12:01”,
“V”:对,
“zk”:“,
“zo”:“7”,
“海关”:[
"39210000"
],
“拉特隆”:{}
},
//……等等
//这是我失败的尝试
$(文档).ready(函数(){
var CommodityCounts={};
var Commoditycds=[];
var totalCount=0;
//在对象中循环
$.each(json,函数(key,val){
var Commoditycd=val[“海关”];
//构建唯一国家/地区名称的数组
如果($.inArray(Commoditycd,Commoditycds)=-1){
Commoditycds.push(Commoditycd);
}
//添加或增加国家名称的计数
if(商品计数的类型[Commoditycd]=“未定义”){
CommodityCounts[Commoditycd]=1;
}
否则{
商品账户[商品账户]++;
}
//增加总计数,以便我们可以计算%
totalCount++;
});
//控制台日志(Commoditycds);
var数据=[];
//通过独特的国家建立图表数据
$。每个(Commoditycds,函数(键,Commoditycd){
数据推送({
名称:Commoditycd,
数据:商品计数
});
});
控制台日志(数据);
});
//需要像这样显示数据(代码的名称以及它在我的json对象中出现的次数-名称:'123123',数据:[83]
这应该可以

var result=json.reduce(函数(a,x){
x、 海关.外汇兑换(职能(c){
a[c]=a[c]?a[c]+1:1
});
返回a;
}, {});
结果=对象。键(结果)。减少(函数(a,键){
返回a.concat([{name:key,data:result[key]}])
}, []);
console.log(结果);
这应该可以

var result=json.reduce(函数(a,x){
x、 海关.外汇兑换(职能(c){
a[c]=a[c]?a[c]+1:1
});
返回a;
}, {});
结果=对象。键(结果)。减少(函数(a,键){
返回a.concat([{name:key,data:result[key]}])
}, []);

console.log(result);
我的版本与Rūdolfs非常相似,只是我使用
map
而不是
reduce
来构建新数组。它还检查
Customs
属性是否存在

var out = arr.reduce(function (p, c) {
    if (c.Customs) {
        c.Customs.forEach(function (el) {
            p[el] = (p[el] || 0) + 1;
        });
    }
    return p;
}, {});

var out = Object.keys(out).map(function (key) {
  return { name: key, value: out[key] };
});

我的版本与Rūdolfs非常相似,只是我使用
map
而不是
reduce
来构建新数组。它还检查
Customs
属性是否存在

var out = arr.reduce(function (p, c) {
    if (c.Customs) {
        c.Customs.forEach(function (el) {
            p[el] = (p[el] || 0) + 1;
        });
    }
    return p;
}, {});

var out = Object.keys(out).map(function (key) {
  return { name: key, value: out[key] };
});

名称:123213数据:22
它与您发布的数组有什么关系?我不知道预期的行为。编辑:我认为您希望名称与海关属性匹配,但仍然不清楚数组中有多个对象时应该是什么数据以及您期望什么。您必须使用MCVE复制问题编辑您的问题仅供参考,wh你拥有的是一个对象数组,而不是JSON。你可以在
海关
数组中拥有多个数字吗?@RoryMcCrossan Nice one你从哪里获得
123213
?为什么
数据:22
名称:123213数据:22
与你发布的数组有什么关系?我没有得到预期的行为。编辑:我想您希望名称与Customs属性相匹配,但仍然不清楚数组中有多个对象时,数据应该是什么以及您期望的是什么。您必须使用MCVE复制issueJust仅供参考,您拥有的是一个对象数组,而不是JSON。在
Customs
数组中可以有多个数字吗?@RoryMcCrossan Nice onewhere您是否从中获得
123213
?为什么
data:22
?无法读取未定义的属性“forEach”――您如何定位“Customs”键?aaaa我知道这是可行的:)但我认为我的部分失败了,因为有些部分不包含自定义项。@user5554551您可以在reduce中添加一个检查,也可以在reduce之前应用一个过滤器,例如:无法读取undefined的属性“forEach”-您如何定位“Customs”key?aaaa我知道这是可行的:)但我认为我的部分失败了,因为有些部分不包含自定义密钥。@user5554551您可以在reduce中添加一个检查,或者在reduce之前应用一个过滤器,比如这里:
map
确实更合适。+1
map
确实更合适。+1