假设我有两个包含数字的数组..
[1,1,7,6], [1,7]
我需要用第二个数组中没有出现的数字创建一个新数组,但也要考虑有两个1。
我尝试过使用lodash的_.difference([1,1,7,6],[1,7])
以及其他一些简单的Javascript函数,但它们没有考虑到有两个1,所以我最终得到了[6]
我希望的结果是[1,6]
订单无关紧要
答案 0 :(得分:2)
迭代第一个数组。对于第一个数组中的每个元素,搜索第二个数组。如果存在,请将null
插入该索引。如果它不存在,则将其推送到具有差异的新阵列
const difference = (arr1, arr2) => {
const differenceArr = []
for (let i = 0; i < arr1.length; i++) {
const matchingIdx = arr2.indexOf(arr1[i]);
if (matchingIdx !== -1) {
arr2[matchingIdx] = null
} else {
differenceArr.push(arr1[i])
}
}
return differenceArr
}
console.log(difference([1, 1, 7, 7, 6],[1, 1, 7]))
&#13;
答案 1 :(得分:2)
较短的脚本:
<AllowedMethod>HEAD</AllowedMethod>
或者只是做一会儿,而不是在函数内部调用它。
答案 2 :(得分:1)
您可以采取以下措施:
const diff = (array1, array2) => {
const _array2 = Array.from(array2);
const difference = [];
array1.forEach((array1Item) => {
const matchedIndex = _array2.findIndex(array2Item => array2Item === array1Item);
if (matchedIndex > -1) {
// Remove from second array
_array2.splice(matchedIndex, 1);
} else {
// No match found, add to difference array
difference.push(array1Item);
}
});
// Return the remaining items in _array2 and difference
return [ ..._array2, ...difference ];
}
通过复制第二个数组,您可以从中删除任何匹配项。并且通过将其与匹配的array1&gt;组合。 array2,你会得到两个方向的差异,包括重复。