Javascript迭代计数另一个数组中的数组实例
我觉得这里有很多类似的问题,但我仍然被困在这里,我想我会问。这是codecademy linter问题,我无法收集一个数组的元素在另一个数组中找到的实例数 即使有Git中其他人提供的解决方案,我也无法给出“我自己的”答案。我在S.O.看到了很多类似的解决方案,但仍然没有进展 数组1Javascript迭代计数另一个数组中的数组实例,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个小时后,我的眼
[ 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++;
}
} )
} );