Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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 计算数组中的眼波数_Javascript_Jquery_Arrays_For Loop - Fatal编程技术网

Javascript 计算数组中的眼波数

Javascript 计算数组中的眼波数,javascript,jquery,arrays,for-loop,Javascript,Jquery,Arrays,For Loop,我感兴趣的是找出数组中每个对象出现的次数 下面是我想做的,混合一些伪代码,我认为这是一种方法 var myArray = [1,2,3,1,1,3,4]; for (i = 0; i < myArray.length; i++) { if (myArray[i].AlreadyExistsInAVariable) { var[i]+ = 1; } else { CreateAnewVar(); } } var one =

我感兴趣的是找出数组中每个对象出现的次数

下面是我想做的,混合一些伪代码,我认为这是一种方法

var myArray = [1,2,3,1,1,3,4];

for (i = 0; i < myArray.length; i++) {
    if (myArray[i].AlreadyExistsInAVariable) {
        var[i]+ = 1;
    }
    else {
        CreateAnewVar();
    }
}

var one = 3;
var two = 1;
var three = 2;
var four = 1;
var myArray=[1,2,3,1,1,3,4];
对于(i=0;i
您应该使用object来计算数组中出现的数字,而不是使用变量

var myArray = [1,2,3,1,1,3,4];
var counter = {};
for (i = 0; i < myArray.length; i++) {
    if (myArray.indexOf(myArray[i])>=0) {
        if(!counter[myArray[i]]){
           counter[myArray[i]]=1;
        }
        else{
           counter[myArray[i]]++;  
        }    
    }
}
console.log(counter);
var myArray=[1,2,3,1,1,3,4];
var计数器={};
对于(i=0;i=0){
如果(!计数器[myArray[i]]){
计数器[myArray[i]]=1;
}
否则{
计数器[myArray[i]]++;
}    
}
}
控制台日志(计数器);

实际上,您不能像那样创建新的变量绑定。但是,您可以动态地向对象添加新属性,这可能更适合解决此问题。下面是一个计算该数组中数字出现次数的示例:

var myArray = [1,2,3,1,1,3,4];

var counts = myArray.reduce(function(result, item) {
    result[item] || (result[item] = 0);
    result[item]++;
    return result;
}, {});

console.log(counts);
在这里查看它的作用:

这个怎么样:

var myArray = [1,2,3,1,1,3,4];

var count = myArray.reduce(function(n, val) {
    return n + (val === 1);
}, 0);

console.log(count);
编辑:

为了计算数组中每个元素的出现次数,我将执行以下操作:

var result = {};

[1,2,3,1,1,3,4].forEach(function(e, i) {
     result[e] = result[e] + 1 || 1;
});

alert(JSON.stringify(result, null, "\t"));

还要记住,数组中对象的数量以及类型的数量将不断变化。几乎是重复的:。然而,解决Fyxerz指出的问题会使它成为一个复制品。为什么你不实施它,测试它,改进它,直到你自己做出来?我认为你需要这样的东西:为什么这个答案被否决。在否决前提供理由是值得赞赏的,这正是我将要做的。但是我认为你不需要这一行
if(myArray.indexOf(myArray[I])>=0)
它只是多余的,所以已经被这些类型的问题淹没了!此外,OP似乎在发布之前没有进行任何搜索。@Vicky:那么这就是否决投票的正当理由吗?我相信只有在答案错误或不可逆时,人们才会否决投票。没有理由的向下投票会阻止人们回答或帮助问卷,我觉得这是不对的。如果能解释一下向下投票的原因,我将不胜感激……这个答案很有效,似乎是解决我问题的好方法,比使用数组要好。然而,我真的不明白你是怎么做到的。。。关于reduce中的函数,有什么链接我可以告诉自己更多的信息吗?@Fyxerz MDN文档非常好:我甚至无法理解这是在做什么……好吧,从技术上讲,它计算数字1的出现次数,但即便如此,也只是因为JavaScript中奇怪的类型强制行为导致
+true
等于
+1
。我没有正确地阅读这个问题。我认为OP想要计算单个元素的发生率。想解释一下@jmar777的确切含义吗?在没有强制的情况下,
===
是否进行比较?是的,
===
执行严格的相等比较,但该比较的结果是布尔值。因此,
n+(val==1)
表达式产生
+
表达式。我不知道这是否是出于设计,因为您的解决方案在技术上是可行的(!!),但这只是因为在JavaScript中,
+true
结果是
+1