在javascript中计算数组中元素的出现次数
我有一个这样的数组,我想计算每个元素的频率在javascript中计算数组中元素的出现次数,javascript,Javascript,我有一个这样的数组,我想计算每个元素的频率 var arr = [1, 5, 7, -1]; function countArray (arr){ var map = []; for (var i =0; i < arr.length ; i++){ map[arr[i]]++; } console.log(map); } var-arr=[1,5,7,-1]; 函数计数数组(arr){ var-map=[]; 对于(变量i=0;i
var arr = [1, 5, 7, -1];
function countArray (arr){
var map = [];
for (var i =0; i < arr.length ; i++){
map[arr[i]]++;
}
console.log(map);
}
var-arr=[1,5,7,-1];
函数计数数组(arr){
var-map=[];
对于(变量i=0;i
console.log
打印[1:NaN,5:NaN,7:NaN,-1:NaN]
我希望它能打印[1:1,5:1,7:1,-1:1]
我不明白为什么我得到了
NaN
好吧,如果这是第一次发生,那么你会尝试增加一个未定义的。因此,首先检查它是否未定义,然后分配0,或递增它
您应该使用对象,而不是数组。对象有一个键
和值
,而数组
是一组有序的元素,通过它们的数字索引访问
我编辑这篇文章是为了解释您可以使用数组
对象。如果索引的值大于数组中的最大索引,则将调整其大小。但是,我认为使用对象更好,因为将来如果使用其他类型的键(而不是数字),那么代码将不需要任何更改
var arr = [1, 5, 7, -1];
function countArray (arr) {
var map = {};
for ( var i =0; i < arr.length ; i++ ){
map[ arr[i] ] = typeof map[ arr[i] ] === 'undefined' ? 1 : ++map[ arr[i] ];
}
console.log(map);
}
var-arr=[1,5,7,-1];
函数计数数组(arr){
var-map={};
对于(变量i=0;i
好吧,如果这是第一次发生,那么您将尝试增加一个未定义的值。因此,首先检查它是否未定义,然后分配0,或递增它
您应该使用对象,而不是数组。对象有一个键
和值
,而数组
是一组有序的元素,通过它们的数字索引访问
我编辑这篇文章是为了解释您可以使用数组
对象。如果索引的值大于数组中的最大索引,则将调整其大小。但是,我认为使用对象更好,因为将来如果使用其他类型的键(而不是数字),那么代码将不需要任何更改
var arr = [1, 5, 7, -1];
function countArray (arr) {
var map = {};
for ( var i =0; i < arr.length ; i++ ){
map[ arr[i] ] = typeof map[ arr[i] ] === 'undefined' ? 1 : ++map[ arr[i] ];
}
console.log(map);
}
var-arr=[1,5,7,-1];
函数计数数组(arr){
var-map={};
对于(变量i=0;i
您应该检查数组是否已经包含密钥,您可以使用“in”来执行此操作
var arr = [1, 5, 7, -1, -1];
function countArray (arr){
var map = [];
for (var i =0; i < arr.length ; i++){
if (arr[i] in map) map[arr[i]]++;
else map[arr[i]] = 1;
}
console.log(map);
}
countArray (arr)
var-arr=[1,5,7,-1,-1];
函数计数数组(arr){
var-map=[];
对于(变量i=0;i
输出:
[1:1,5:1,7:1,-1:2]
您应该检查数组是否已经包含密钥,您可以使用“in”来执行此操作
var arr = [1, 5, 7, -1, -1];
function countArray (arr){
var map = [];
for (var i =0; i < arr.length ; i++){
if (arr[i] in map) map[arr[i]]++;
else map[arr[i]] = 1;
}
console.log(map);
}
countArray (arr)
var-arr=[1,5,7,-1,-1];
函数计数数组(arr){
var-map=[];
对于(变量i=0;i
输出:
[1:1,5:1,7:1,-1:2]
你的函数很好,但你可以用数组来实现。减少一行:
var-arr=[1,5,7,-1,1,1];
var r=arr.reduce((ac,x)=>{if(!ac[x])ac[x]=0;返回ac[x]++,ac},{});
document.write(JSON.stringify(r))
您的函数很好,但可以使用数组来完成。减少一行代码:
var-arr=[1,5,7,-1,1,1];
var r=arr.reduce((ac,x)=>{if(!ac[x])ac[x]=0;返回ac[x]++,ac},{});
document.write(JSON.stringify(r))
使用reduce进行更多操作:
var arr = [1, 5, 7, -1];
var count = arr.reduce(function(obj, next) {
obj[next] = ++obj[next] || 1;
return obj;
}, {});
A更多关于减少:
var arr = [1, 5, 7, -1];
var count = arr.reduce(function(obj, next) {
obj[next] = ++obj[next] || 1;
return obj;
}, {});
在执行
++
之前,需要将值初始化为0
。否则,您将执行null+1
,这是NaN(不是数字)。您可以通过在for
循环的开头添加以下内容来解决此问题:如果(!map.hasOwnProperty(arr[i]){map[arr[i]]=0;}
@JoshKG我是一个学习编程的单身妈妈。对不起,糟糕的“乐高电影”笑话:)在执行++
之前,您需要将值初始化为0
。否则,您将执行null+1
,这是NaN(不是数字)。你可以在你的for
循环的开头加上:如果(!map.hasOwnProperty(arr[i]){map[arr[i]=0;}
@JoshKG我是一个学习编程的单亲妈妈。对不起,糟糕的“乐高电影”笑话:)我只是在这里放了一行,这样你就不会孤单了:xs.reduce((acc,x)=>Object.assign(acc,{[x]:(acc[x];(acc[x]|0) + 1 }), {});
除非另有规定,否则在回答类似问题时请使用ES5语法,以实现最大的浏览器兼容性。箭头函数(在ECMAScript 2015中引入)还不受所有主流浏览器的支持(例如IE11,它是Windows 7上可用的IE的最高版本,目前仍在广泛使用)。我在这里只写了一行代码,这样你就不会孤单:xs.reduce((acc,x)=>Object.assign(acc,{[x]:(acc[x]| 0)+1})
除非另有规定,否则在回答类似问题时请使用ES5语法,以实现最大的浏览器兼容性。箭头功能(随ECMAScript 2015引入)尚未得到所有主流浏览器的支持(例如,IE11,它是Windows 7上可用的IE的最高版本,目前仍在广泛使用)。或者:map[arr[i]=(map[arr[i]]|0)+1
。或者:map[arr[i]=(map[arr[i]|0)+1
。如果使用的元素与对象原型中的属性名称匹配,则会导致问题。如果您正在中使用,则应通过执行hasOwnProperty
检查来过滤结果。鉴于OP只是在学习,我也不建议您使用条件语句的“内联”样式。如果使用的元素与对象原型中的属性名称匹配,这将导致问题。如果您在