2017-10-13 44 views
0

我有以下阵列:优化阵列功能ES6路口

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

我有以下的,其工作正常:

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++; 
    }); 

但我想知道这是否可以在一个整洁时尚USNG一些ES6的新功能来实现,或者原有的JS

+0

你可以假设它们在一般的排序? – user2662833

+1

您正在寻找两个阵列之间的**差异**。谷歌为此。 – 2017-10-13 13:09:28

+0

请参阅https://stackoverflow.com/questions/40998880/get-the-different-of-arrays-in-es6 –

回答

0

你可以只使用Array#includes功能检查,如果第二阵列中存在或不是元素

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

@Alex你已经接受了一个答案,答案与你自己所说的正确答案不同,这是第一种情况下的“2”。 – 2017-10-13 16:45:59

+0

你说得对。我要删除这个答案。我没有注意到我的结果是错误的。删除接受,让我删除这个 –

+0

为什么你不修正答案,而不是删除它? –

1

集将在这里做的非常出色:)

let set1 = new Set(this.originalSelectedRows) 
let set2 = new Set(this.selectedRows) 
let difference = new Set([...set1].filter(n => !set2.has(n))) 

他们也比较快速,但不如特制解决方案那样快:P

我假设所有的项目是独一无二的,但:) :)

+0

我爱你的表情符号 - 他们的意思是在那里有一种我错过的笑话? :-) – 2017-10-13 13:12:00

+0

我真的需要缓和笑容!党! – user2662833

2

你可以把长度作为计数器,并减少与普通项目的价值。

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);

+0

可读性比短小的代码更重要。你总是有办法让新程序员完全理解最简单的逻辑。 – Cerbrus

+0

具体而言'&&(count1--,count2 - )'是新用户无法识别的内容。 '&&'作为快捷方式'if'和'(,)'不是他们将识别的常见结构。 – Cerbrus

+0

@NinaScholz我知道你有多想使用'reduce',并写出更多不明确的代码。在这里你去:'const common = arr.reduce((result,elt)=> result + array2.includes(elt));'。请注意我们添加布尔值的巧妙方法。现在答案只是'array1.length - common'和'array2.length - common'。 – 2017-10-13 17:09:27

1

我一个数组转换成一组,比过滤其它数组,它是不在集合中的项目。

const 
 
    valuesA = [1,2,3,4,5], 
 
    valuesB = [3,4,5,6,7,8]; 
 
    
 
function getUniqueValues(sourceArray, testArray) { 
 
    const 
 
    set = new Set(testArray); 
 
    
 
    return sourceArray.filter(value => !set.has(value)); 
 
} 
 

 
console.log(`Values in A and not in B: ${getUniqueValues(valuesA, valuesB)}`); 
 
console.log(`Values in B and not in A: ${getUniqueValues(valuesB, valuesA)}`);