如何执行过滤器和包含

时间:2018-06-11 05:14:56

标签: javascript

尝试遍历第二个数组以查看第一个数组是否匹配,哪里有匹配,那么第二个数组(或新数组)的索引将包含每次找到元素的数量,它将将它显示在一个新数组中:

function getOccur(ar1, ar2){
  let ar = [];
  return ar2.filter((el,i)=>ar2.includes((el)=>{
    ar[i]+= 1;
  }));
  return ar;
}
getOccur(
  ['apple', 'orange', 'apple', 'pp', 'pear', 'orange'],
  ['apple', 'orange', 'pear', 'banana']
);

我想要的输出是:

[2, 2, 1, 0]

也就是说,apple发生2次,orange发生2次,pear发生1次,banana发生0次

4 个答案:

答案 0 :(得分:4)

如何循环第二个数组,并使用过滤器计算第一个数组中每个项目的出现次数?这样,您可以删除includes,代码更容易理解。



function getOccur(arr1, arr2) {
  let finalArr = [];
  arr2.forEach((a) => {
    finalArr.push(arr1.filter(item => item === a).length);
  });
  return finalArr;
}

const arr1 = ['apple', 'orange', 'apple', 'pp', 'pear', 'orange'];
const arr2 = ['apple', 'orange', 'pear', 'banana'];

console.log(getOccur(arr1, arr2));




答案 1 :(得分:2)

您需要计算出现次数 - includes只会为您提供truefalse,而filter只会为您提供原始过滤版本阵列。这些都不适合这种情况 - 我会使用reduce代替O(n)解决方案:

const getOccur = (ar1, ar2) => Object.values(
  ar1.reduce(
    (a, item) => {
      if (item in a) a[item]++;
      return a;
    },
    ar2.reduce((a, prop) => {
      a[prop] = 0;
      return a;
    }, {})
  )
);

console.log(
  getOccur(
    ['apple', 'orange', 'apple', 'pp', 'pear', 'orange'],
    ['apple', 'orange', 'pear', 'banana']
  )
);

答案 2 :(得分:1)

使用map和forEach的另一种解决方案

function getOccur(ar1, ar2) {
    const result = ar2.map(fruit => {
        let foundCount = 0;
        ar1.forEach((element) => { foundCount += (element === fruit ? 1 : 0) })
        return foundCount
    })
    return result
  }
  console.log(getOccur(['apple', 'orange', 'apple', 'pp', 'pear', 'orange'], ['apple', 'orange', 'pear', 'banana']))

答案 3 :(得分:1)

阵列过滤器可能无法满足您的需求。

只需处理两个可以正常工作的forEach



function getOccur(ar1, ar2) {
    let ar = [];
    let index = 0;
    ar2.forEach(
        (el) => {
            ar.push(0);
            ar1.forEach(
                (el2) => {
                    if (el == el2) ar[index] += 1;
                }
            );
            index++;
        }
    );
    return ar;
}
console.log(
getOccur(
    ['apple', 'orange', 'apple', 'pp', 'pear', 'orange'], ['apple', 'orange', 'pear', 'banana']
));