我有以下阵列:
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
答案 0 :(得分: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);

答案 1 :(得分:1)
套装在这里会做得很好:)
let set1 = new Set(this.originalSelectedRows)
let set2 = new Set(this.selectedRows)
let difference = new Set([...set1].filter(n => !set2.has(n)))
它们也相对较快,但不如特制解决方案快:P
我假设你的所有物品都是独一无二的:)
答案 2 :(得分: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)}`);
答案 3 :(得分: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);