我觉得这里有很多与此类似的问题,但是由于我仍然被困住,我想我会问。这是一个代码学院的linter问题,我无法收集在另一个数组中找到一个数组元素的实例数。
即使其他人在Git中提供了解决方案,我也无法做出“我自己的”答案。我在S.O中看到了很多类似的解决方案。但仍然没有继续。
数组1
[ a, b, c, d, e, a, b, c, d, e, a,...]
数组2
[a, b]
代码
const newConstant = (array1.forEach(foo) => {
array2.filter (bar) => {
if (foo[i] === bar[i]) {
newConstant++;
}
}
});
我可能正在使我所看到的解决方案混为一谈,并采取两全其美的做法。但是当我在3个会话中观察了将近2个小时时,我有点cross目结舌。为什么我不能收集a和b在数组1中出现的次数?
错误:
SyntaxError:意外令牌”
答案 0 :(得分:1)
您的代码中有几个问题...
我相信您应该阅读变量声明和箭头函数,因为如所指出的错误,您的语法不正确。
在这里您的作品经过修改以具有所需的功能:
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);
答案 1 :(得分:1)
您有严重的语法错误,这是语法的更正:
let newConstant = 0;
array1.forEach( foo => {
array2.filter( bar => {
if( foo === bar ){
newConstant++;
}
} )
} );
您不能const
因为要增加变量的值(重新分配值),而关键字const
意味着您要给它一个初始值,并且永远不要更改它。
因此,将其替换为let
,它可以更改变量的值。
这两种方法forEach
和filter
以一个函数为参数,在此代码上,您使用的是箭头函数foo => { ... }
,但语法错误。
因此,您需要将该函数作为forEach
和filter
的参数来传递,方法是将整个值放在forEach( HERE! )
的括号之间...例如:array1.forEach( foo => { ... } )
>
我最后看到的一件事是,您在声明和分配给该变量时试图增加newConstant
,这是不可能的,或者至少不会起作用。
答案 2 :(得分:1)
既然您已经获得了一些答案,我想我会提供一个替代方案。这可能比其他答案要慢一些,但我喜欢它的阅读方式。
php artisan migrate
如果不确定,您还可以进一步分解内容,使其更具可读性。例如
var findNeedles = function (needle, haystack) {
return haystack
// we only need to check as far as there is room for the needle
.slice(0, haystack.length - needle.length + 1)
// get each subsection that may match the needle (same length)
.map((c, i, a) => haystack.slice(i, i + needle.length))
// filter out sections that match the needle
.filter(c => c.every((e, i)=> e === needle[i] ));
}
var haystack = [ "a", "b", "c", "d", "e", "a", "b", "c", "d", "e", "a"];
var needle = ["a", "b"];
console.log("Found matches: ", findNeedles(needle, haystack).length);
答案 3 :(得分:0)
简单的解决方案,
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);
答案 4 :(得分:-1)
简单的解决方案;)
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);