javascript - Javascript:如何找到两个数字数组的差异
问题描述
我需要创建一个由来自两个单独数组的唯一元素组成的新数组。
我已将两个数组转换为一个数组,然后将其转换为一个对象以检查元素的频率。如果对象属性的值为 1(使其成为唯一属性),我想将其返回到数组(减去值)。有没有一种简单的方法来实现这一目标?
编辑:将结果移到 for 循环之外。预期输出应为 [4]
function diffArray(arr1, arr2) {
var finalArr = [];
var countObj = {};
var newArr = [...arr1, ...arr2];
for (var i = 0; i < newArr.length; i++) {
if (!countObj[newArr[i]]) countObj[newArr[i]] = 0;
++countObj[newArr[i]];
}
for (var key in countObj) {
if (countObj[key] === 1) {
finalArr.push(key);
}
} return finalArr;
}
diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]);
解决方案
如果我理解正确,您希望找到 and 之间的差异arr1
,arr2
并将该差异(如果有)返回为新的项目数组(在任一数组中都是不同的)。
有多种方法可以实现这一目标。一种方法如下:
function diffArray(arr1, arr2) {
const result = [];
const combination = [...arr1, ...arr2];
/* Obtain set of unique values from each array */
const set1 = new Set(arr1);
const set2 = new Set(arr2);
for(const item of combination) {
/* Iterate combined array, adding values to result that aren't
present in both arrays (ie exist in one or the other, "difference") */
if(!(set1.has(item) && set2.has(item))) {
result.push(item);
}
}
return result;
}
console.log(diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]), " should be [4]");
console.log(diffArray([1, 2, 3, 5, 8], [1, 2, 3, 5]), " should be [8]");
console.log(diffArray([1, 2, 3, 5, 8], [1, 2, 3, 5, 9]), " should be [8, 9]");
console.log(diffArray([1, 2], [1, 2]), " should be []");
推荐阅读
- javascript - Webpack 4 中 css-loader 的 importLoaders 选项到底是什么?
- matlab - Matlab:文件夹路径中'../'的含义
- python - 列表的 Python Django Lambda 表达式
- vba - 跟踪已处理 VBA 的 Excel 文件
- angular - 如何在按钮单击时多次创建现有组件 - Angular
- php - 我在尝试获取 Laravel 中列的属性时遇到问题
- php - 如果通过函数调用 PHP 代码的行为不同
- javascript - 使用 JavaScript 的 C3 数据的数据结构/格式
- javascript - 添加带有事件 laravel 的脚本后,在 fullcalendar 上不工作
- ios - Swift 闭包 - 关于值分配的代码执行顺序