我有以下数组:
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++;
});但我想知道是否可以使用es6的一些新特性或原始JS,以更整洁的方式实现这一点。
发布于 2017-10-13 13:05:35
您只需使用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);
发布于 2017-10-13 13:12:29
您可以以长度作为计数器,并使用公共项减少值。
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);
发布于 2017-10-13 13:09:56
在这里,Sets会做得很好:)
let set1 = new Set(this.originalSelectedRows)
let set2 = new Set(this.selectedRows)
let difference = new Set([...set1].filter(n => !set2.has(n)))它们的速度也相对较快,但没有巧尽心思构建的解决方案那么快:P
我假设您的所有项目都是独一无二的:)
https://stackoverflow.com/questions/46730601
复制相似问题