Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays_Function_Syntax_Iterator - Fatal编程技术网

Javascript迭代计数另一个数组中的数组实例

Javascript迭代计数另一个数组中的数组实例,javascript,arrays,function,syntax,iterator,Javascript,Arrays,Function,Syntax,Iterator,我觉得这里有很多类似的问题,但我仍然被困在这里,我想我会问。这是codecademy linter问题,我无法收集一个数组的元素在另一个数组中找到的实例数 即使有Git中其他人提供的解决方案,我也无法给出“我自己的”答案。我在S.O.看到了很多类似的解决方案,但仍然没有进展 数组1 [ a, b, c, d, e, a, b, c, d, e, a,...] 阵列2 [a, b] 代码 我可能是在贬低我所看到的解决方案,并在两个世界中取其最坏的一面。但当我在3个疗程中看了近2个小时后,我的眼

我觉得这里有很多类似的问题,但我仍然被困在这里,我想我会问。这是codecademy linter问题,我无法收集一个数组的元素在另一个数组中找到的实例数

即使有Git中其他人提供的解决方案,我也无法给出“我自己的”答案。我在S.O.看到了很多类似的解决方案,但仍然没有进展

数组1

[ a, b, c, d, e, a, b, c, d, e, a,...]
阵列2

[a, b]
代码

我可能是在贬低我所看到的解决方案,并在两个世界中取其最坏的一面。但当我在3个疗程中看了近2个小时后,我的眼睛开始交叉了。为什么我不能收集a和b在数组1中出现的次数

错误:

SyntaxError:意外标记'


您的代码中有几个问题

我认为您应该仔细阅读变量声明和箭头函数,因为正如错误所述,您的语法不正确

这是您的作品,经过修改,具有所需功能:

let newConstant = 0;
array1.forEach((foo) => {
    array2.filter((bar) => {
        if (foo === bar) {
            newConstant++;
        }
    })
});
console.log(newConstant);
但是,我会采取不同的做法,例如:

let count=0;
array1.map((elm1) => {
    if(array2.indexOf(elm1)!==-1) {
        count+=1;
    }
});
console.log(count);
简单解

let arr1 =  [ 'a', 'b', 'c', 'd', 'a', 'b', 'b'];
let arr2 = ['a', 'b'];
let obj= {};
arr1.forEach(x => {
        arr2.forEach(y => {
            if(y === x){
                if(obj[x]){
                obj[x] = obj[x] + 1;
            } else {
                obj[x] = 1;
            }
        }
    });
});

console.log(obj);
简单的解决方案

var array1  = [ 'a', 'b', 'c', 'd', 'e', 'a', 'b', 'c', 'd', 'e', 'a'];

var array2 =  ['a', 'b', 'a'];

var result = {};

array2.forEach((elem) => {
    let count = array1.filter(element => element === elem);
    result[Symbol('a')] = count.length; // Here we use symbols to catch hold of repeated elements
});

console.log(result);

您有重大语法错误,以下是对语法的更正:

let newConstant = 0;
array1.forEach( foo => {
    array2.filter( bar => {
        if( foo === bar ){
            newConstant++;
        }
    } )

} );
您不能使用const,因为您正在增加重新分配值的变量的值,而这个关键字const意味着您要给它一个初始值,并且永远不要更改它。 因此,将其替换为let,它允许更改变量的值

forEach&filter这两个方法将函数作为参数,在这段代码中使用的是箭头函数foo=>{…},但语法错误

因此,您需要将此函数作为forEach&filter的参数传递,方法是将整个函数放在forEach的括号之间。。。例如:array1.forEach foo=>{…}


我看到的最后一件事是,在声明和分配该变量时,您试图递增newConstant,这是不可能的,或者至少它不起作用。

既然您已经得到了一些答案,我想我会提供一个替代方案。这可能比其他答案慢一点,但我喜欢它的阅读方式

var findNeedles=功能针,干草堆{ 还田草垛 //我们只需要检查是否有足够的空间放针 .0,haystack.length-针.length+1 //使每一个可能匹配相同长度的针的分段 .mapc,i,a=>haystack.slicei,i+needle.length //过滤掉与针匹配的部分 .filterc=>c.everye,i=>e==needle[i]; } var haystack=[a,b,c,d,e,a,b,c,d,e,a]; 变量针=[a,b];
console.logFound匹配项:,FindNeedlesPionel,haystack.length;善意的建议:将那段脚本扔进垃圾桶,检查箭头函数如何工作,什么.forEach和.filter执行和返回,const关键字执行什么,索引如何工作。根据forEach的说法,它们都需要函数,而不是像foo和bar这样的名称;你是从哪里得到i索引的?伙计,我无意冒犯你,但你必须首先明白你不能按任何顺序键入任何东西。你需要尊重自己的语法。这就是为什么你会得到SyntaxError。检查每个[{都有自己的]}。请提供可读且可运行的代码。我刚刚学习了这些迭代。forEach和。filter。我现在正在尝试使用它们。所以告诉我放弃一切,去学点东西是没有帮助的。而且,这段代码的可读性是我所能做到的。TO显然是个初学者。从长远来看,向他扔一串代码是没有用的。添加一些解释,解释为什么他的解决方案不起作用,以及您改变了什么以及为什么。不要犯与OP相同的错误。不要滥用Arrayfilter作为ArrayforEachdoh,const的建议似乎是正确的,我在这里注定要失败,因为我永远不会让这件事发生在我自己身上…@Thomas我离开Arrayfilter是为了不混淆发布问题的Darryl Calder,因为我已经更改了他的代码,解释了为什么以及我做了什么,只是更正了语法。谢谢!我犯了3个错误:1。当我需要增加新变量时,我错误地将其声明为常量。2.我错过了在数组过滤器中嵌入foo和bar参数的一组软括号。3.我在foo和bar中添加了不必要的方括号。我今天的票用完了,明天再给你-谢谢,slice和map也是我在过去几天里刚刚提到的迭代。我仍然在为javascript的语法和操作顺序而挣扎,作为一个快速的解释,切片只返回从索引x到y的子数组。map接受a,在每个项上循环,并传递项c、索引i和数组a,然后基于返回值构建一个新数组。Lambda函数非常简单。它们只是参数=>和返回值。在我的示例中,我返回另一个切片,从索引开始,到第一个贴图的索引+针长度
还有一个过滤器的布尔检查。谢谢你,这些迭代都是它们自己的。在本课中,它们似乎没有那么复杂,但当有多个]};一个功能中的需求我感到困惑。:/很快,我需要退一步改进我的词汇表。只是一些友好的建议,继续学习,因为你需要了解如何读/写语法,但尽量避免这样的代码。您可以随时调整代码并分解部分以使其更具可读性。我又加了一个例子。它做同样的事情,但使用较少的嵌套。我创建了三个变量函数,它们的名称都很好,可读性很强,你再也没有任何大括号了。不要害怕写更长的代码,如果它能帮助你更好地阅读,很多人认为短===好!
let newConstant = 0;
array1.forEach( foo => {
    array2.filter( bar => {
        if( foo === bar ){
            newConstant++;
        }
    } )

} );