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

时间:2019-06-07 14:12:49

标签: javascript arrays function syntax iterator

我觉得这里有很多与此类似的问题,但是由于我仍然被困住,我想我会问。这是一个代码学院的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:意外令牌”

5 个答案:

答案 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,它可以更改变量的值。

这两种方法forEachfilter以一个函数为参数,在此代码上,您使用的是箭头函数foo => { ... },但语法错误。

因此,您需要将该函数作为forEachfilter的参数来传递,方法是将整个值放在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);