Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的JSON数组计数_Javascript_Arrays - Fatal编程技术网

JavaScript中的JSON数组计数

JavaScript中的JSON数组计数,javascript,arrays,Javascript,Arrays,我有以下数组: [{"__metadata":{"id":"bba6f593-167d-4f14-85cf-3b69288f5434","etag":"\"1\"","type":"SP.Data.PollLogListItem"},"PollId":1,"Answer":"Option3"},{"__metadata":{"id":"925dceaf-250f-43c1-be73-9972b0a34750","etag":"\"2\"","type":"SP.Data.PollLogListI

我有以下数组:

[{"__metadata":{"id":"bba6f593-167d-4f14-85cf-3b69288f5434","etag":"\"1\"","type":"SP.Data.PollLogListItem"},"PollId":1,"Answer":"Option3"},{"__metadata":{"id":"925dceaf-250f-43c1-be73-9972b0a34750","etag":"\"2\"","type":"SP.Data.PollLogListItem"},"PollId":1,"Answer":"Option4"},{"__metadata":{"id":"85c73abb-a565-4e2c-b74c-1883c15e2eb6","etag":"\"1\"","type":"SP.Data.PollLogListItem"},"PollId":1,"Answer":"Option3"}]
我如何获得以下分组计数:

[
  {"Answer":"Option3","Count":2},
  {"Answer":"Option4","Count":1}
]
我以前的数组没有计数键。我在下面尝试过,但它给出了一个错误。有人能帮我吗

const data=[{uu元数据]:{“id”:“bba6f593-167d-4f14-85cf-3b69288f5434”,“etag”:“1\”,“type”:“SP.data.PollLogListItem”},“PollId”:1,“Answer”:“Option3”},{“uu元数据”:{“id”:“925dceaf-250f-43c1-be73-9972b0a34750”,“etag”;“2\”,“type”:“SP.data.pollLogItem”;“PollId”;“Option3”;“Option4”{“85c73abb-a565-4e2c-b74c-1883c15e2eb6”,“etag”:“1\”,“type”:“SP.Data.polllLogListItem”},“PollId”:1,“Answer”:“Option3”});
函数getCount(pollLog){
计数=pollLog.reduce(函数(r,o){
if(r[o.Answer]){/!(o.Answer in r)
r、 推(r[o.应答]=o);
r[o.Answer]。计数=1;
}否则{
r[o.答案]。计数+=1;
}
}, {})
返回计数;
}

getCount(数据)
我会为此使用
映射
(或者使用
对象创建的对象。创建(null)
,如果您必须支持没有
映射的polyfill的过时环境
):

然后,如果您真的想要该对象数组而不是
映射

const answers = new Map();
for (const {Answer: answer} of data) {
  if (answers.has(answer)) {
    answers.set(answer, answers.get(answer) + 1);
  } else {
    answers.set(answer, 1);
  }
}
const array = [...answers.entries()].map(([Answer, Count]) => ({Answer, Count}));
实例:

const data=[{uu元数据]:{“id”:“bba6f593-167d-4f14-85cf-3b69288f5434”,“etag”:“1\”,“type”:“SP.data.PollLogListItem”},“PollId”:1,“Answer”:“Option3”},{“uu元数据”:{“id”:“925dceaf-250f-43c1-be73-9972b0a34750”,“etag”;“2\”,“type”:“SP.data.pollLogItem”;“PollId”;“Option3”;“Option4”{85c73abb-a565-4e2c-b74c-1883c15e2eb6,“etag”:“1\”,“type”:“SP.Data.PollLogListItem”},“PollId”:1,“Answer”:“Option3”};
const answers=新映射();
for(数据常量{答案:答案}){
如果(答案.has(答案)){
答案.set(答案,答案.get(答案)+1);
}否则{
答案。设置(答案,1);
}
}
console.log(…答案);
//如果需要对象数组,请执行以下操作:
常量数组=[…answers.entries()].map(([Answer,Count])=>({Answer,Count}));
console.log(数组);
。作为控制台包装器{
最大高度:100%!重要;
}
您的
reduce()
逻辑不正确,您没有返回累加器

累加器是一个对象,因此您不能
push()
。当
r[o.Answer]
不存在时,您希望为该属性值创建一个新对象

最后,不是返回reduce对象,而是将其值作为数组返回

函数getCount(pollLog){
变量计数=pollLog.reduce(函数(r,o){
如果(!r[o.Answer]){
r[o.Answer]={答案:o.答案,计数:0}
}
r[o.Answer].Count++;
//必须返回蓄能器
返回r;
}, {})
返回对象。值(计数);
}
console.log(getCount(数据))

“etag”:““,”etag““:“1\”,“1\”,“1”类型“,”类型“,”类型“,”类型“,”类型“,”类型“,”类型“:”数据。pol利利利利利利民民数据.pol利利利利利利民数据.pol利利民数据.pol利民数据.pol利民数据.pol利民数据.pol利民数据.项目,polID:1,polID:1,回答:1,回答:1,回答:1,回答“选项3,”回答:选项3,回答:,,,,,,答案:,选项选项3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,回答回答回答::,,,,,选项选项选项选项3选项3 6“,”etag“\“1\”,“type:“SP.Data.polllLogListItem”},“PollId”:1,“Answer:“Option3”}]

您的reduce回调函数不正确,如果您需要在浏览器或某些es5环境中使用此代码,那么下面是一个解决方案

var data=[{“\uuu metadata”:{“id”:“bba6f593-167d-4f14-85cf-3b69288f5434”,“etag”:“1\”,“type”:“SP.data.PollLogListItem”},“PollId”:1,“Answer”:“Option3”},{“uu metadata”:{“id”:“925dceaf-250f-43c1-be73-9972b0a34750”,“etag”:“2\”,“type”:“SP.data.polllloglistItem”,“PollId”:“Option3”{85c73abb-a565-4e2c-b74c-1883c15e2eb6,“etag”:“1\”,“type”:“SP.Data.PollLogListItem”},“PollId”:1,“Answer”:“Option3”};
函数getCount(pollLog){
const answerscont=pollLog.reduce(函数(r,o){
var answer=o[“answer”];
如果(!r[回答]){
r[答案]=1
}否则{
r[答案]+=1;
}
返回r;
}, {});
返回Object.keys(answerscont).map(函数(key){
返回{“Answer”:key,“Count”:answersCount[key]+“”}
});
}

警报(JSON.stringify(getCount(data));
以下是一种ES2017+方法,用于获取O(N)中所有数组项的计数:

示例阵列的console.log(结果):

[ { Answer: 'Option3', Count: 2 }, { Answer: 'Option4', Count: 1 } ]

JSON是用于数据交换的文本表示法。如果您处理的是JavaScript源代码,而不是字符串,那么您就不是在处理JSON。我已经创建了object@Milind在这种情况下,它与JSON无关,而是处理JavaScript数组和对象。为您编辑了标签。您的代码中有什么错误?很抱歉,我不知道我将在哪里传递我的原始文件array@Milind:这是
数据
。Stacksnippets今天似乎不起作用。这是一个有效的版本
[ { Answer: 'Option3', Count: 2 }, { Answer: 'Option4', Count: 1 } ]