优化阵列功能ES6路口
我有以下阵列:优化阵列功能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
你可以只使用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);
@Alex你已经接受了一个答案,答案与你自己所说的正确答案不同,这是第一种情况下的“2”。 – 2017-10-13 16:45:59
你说得对。我要删除这个答案。我没有注意到我的结果是错误的。删除接受,让我删除这个 –
为什么你不修正答案,而不是删除它? –
集将在这里做的非常出色:)
let set1 = new Set(this.originalSelectedRows)
let set2 = new Set(this.selectedRows)
let difference = new Set([...set1].filter(n => !set2.has(n)))
他们也比较快速,但不如特制解决方案那样快:P
我假设所有的项目是独一无二的,但:) :)
我爱你的表情符号 - 他们的意思是在那里有一种我错过的笑话? :-) – 2017-10-13 13:12:00
我真的需要缓和笑容!党! – user2662833
你可以把长度作为计数器,并减少与普通项目的价值。
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);
可读性比短小的代码更重要。你总是有办法让新程序员完全理解最简单的逻辑。 – Cerbrus
具体而言'&&(count1--,count2 - )'是新用户无法识别的内容。 '&&'作为快捷方式'if'和'(,)'不是他们将识别的常见结构。 – Cerbrus
@NinaScholz我知道你有多想使用'reduce',并写出更多不明确的代码。在这里你去:'const common = arr.reduce((result,elt)=> result + array2.includes(elt));'。请注意我们添加布尔值的巧妙方法。现在答案只是'array1.length - common'和'array2.length - common'。 – 2017-10-13 17:09:27
我一个数组转换成一组,比过滤其它数组,它是不在集合中的项目。
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)}`);
你可以假设它们在一般的排序? – user2662833
您正在寻找两个阵列之间的**差异**。谷歌为此。 – 2017-10-13 13:09:28
请参阅https://*.com/questions/40998880/get-the-different-of-arrays-in-es6 –