首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阵列函数的ES6交点优化

阵列函数的ES6交点优化
EN

Stack Overflow用户
提问于 2017-10-13 13:02:07
回答 4查看 292关注 0票数 0

我有以下数组:

代码语言:javascript
复制
this.originalSelectedRows = [1,2,3,4,5];
this.selectedRows = [3,4,5,6,7,8];

我想知道以下几点:

this.originalSelectedRows中有多少个数字,而在this.selectedRows中没有多少个数字

在这种情况下是2:

1和2

this.selectedRows中有多少个数字,但没有this.originalSelectedRows

在这种情况下是3:

6、7和8

我有以下几点,效果很好:

代码语言:javascript
复制
    let isOnListCount = 0;
    let isNotOnListCount = 0

    this.selectedRows.map((row) => {
      const isSelected = this.originalSelectedRows.filter(x => x === row);
        if(isSelected.length > 0)
          isOnListCount++;
        else
          isNotOnListCount++;
    });

但我想知道是否可以使用es6的一些新特性或原始JS,以更整洁的方式实现这一点。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-10-13 13:05:35

您只需使用Array#includes函数来检查元素是否存在于第二个数组中。

代码语言:javascript
复制
const originalSelectedRows = [1,2,3,4,5];
const selectedRows = [3,4,5,6,7,8];

let isOnListCount = 0;
let isNotOnListCount = 0;

selectedRows.forEach(row => 
 originalSelectedRows.includes(row) ? isOnListCount++ : isNotOnListCount++
);

console.log(isOnListCount);
console.log(isNotOnListCount);

票数 0
EN

Stack Overflow用户

发布于 2017-10-13 13:12:29

您可以以长度作为计数器,并使用公共项减少值。

代码语言:javascript
复制
var array1 = [1, 2, 3, 4, 5],
    array2 = [3, 4, 5, 6, 7, 8],
    count1 = array1.length,
    count2 = array2.length;
    
array1.forEach(function (a) {
    if (array2.includes(a)) {
        count1--;
        count2--;
    }
});
console.log(count1, count2);

票数 2
EN

Stack Overflow用户

发布于 2017-10-13 13:09:56

在这里,Sets会做得很好:)

代码语言:javascript
复制
let set1 = new Set(this.originalSelectedRows)
let set2 = new Set(this.selectedRows)
let difference = new Set([...set1].filter(n => !set2.has(n)))

它们的速度也相对较快,但没有巧尽心思构建的解决方案那么快:P

我假设您的所有项目都是独一无二的:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46730601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档