我如何比较这两个数组中的元素并仅返回第二个数组的唯一元素?
我想从网上抓取单位并有一个临时数组,然后将其与新抓取的单位进行比较。此后,临时阵列将成为刚刚爬网的单位阵列。 因此,如果没有新单位,则临时数组也可以为空。
我首先检查哪个数组更长。然后,我有一个嵌套的for循环,以较长的数组开头,以针对较短的数组检查每个元素。然后,我被困在想象所有可能的条件,并且不知道如何举报。
function getJustUniqueElementsFromArray2(array1, array2){
let uniqueElements = [];
/* Checks which array is longer */
let longerArray;
let shorterArray;
if (array2.length >= array1.length) {
longerArray = array2;
shorterArray = array1;
} else {
longerArray = array1;
shorterArray = array2;
}
/* Nested for loop starting with longer array */
for (let longerElem of longerArray) {
for (let shorterElem of shorterArray) {
//????
if (!longerElem.isSameAs(shorterElem)) {
uniqueElements.push(shorterElem);
} else if (!shorterElem.isSameAs(longerElem)) {
uniqueElements.push(longerElem);
}
//????
}
}
return uniqueElements;
}
let tempFlats = [];
let newFlats = [A, B, C];
uniqueElements = [A, B, C];
tempFlats = newFlats;
//now: tempFlats = [A, B, C];
newFlats = [A, B, C, D, E];
uniqueElements = [D, E];
tempFlats = newFlats;
//now: tempFlats = [A, B, C, D, E];
newFlats = [A, E, F];
uniqueElements = [F];
tempFlats = newFlats;
//now: tempFlats = [A, E, F];
newFlats = [A, B, G, H];
uniqueElements = [B, G, H];
tempFlats = newFlats;
//now: tempFlats = [A, B, G, H];
newFlats = [];
uniqueElements = [];
tempFlats = newFlats;
我忘了提到数组中的实例在技术上是不一样的。
tempFlats = [A1, B1, C1];
newFlats = [A2, B2, C2, D1, E1];
A1 == A2 // false
A1.isSameAs(A2) // true
function getJustUniqueElementsFromArray2(array1, array2){
let uniqueElements = [];
/* Nested for loop starting with longer array */
for (let elem2 of array2) {
let found = false;
for (let elem1 of array1) {
if (elem2.isSameAs(elem1)) {
found = true;
}
}
if (!found) uniqueElements.push(elem2)
}
return uniqueElements;
}
答案 0 :(得分:0)
您可以使用Set
并过滤数组。
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" class="form-control input-td" name="getmark[]" id="getMark_<?php echo $i++?>" required>
<input type="text" class="form-control input-td" name="mcq[]" id="mcq_<?php echo $i++?>" required>
答案 1 :(得分:0)
更新 即使在那种情况下,您仍然可以摆脱简单的数组方法。
function getFlat(v) {
return {
val: v,
isSameAs: function(o) {
return this.val === o.val
}
}
}
var array1 = [getFlat(1), getFlat(2), getFlat(3)];
var array2 = [getFlat(2), getFlat(3), getFlat(9)];
function getJustUniqueElementsFromArray2(arr1, arr2) {
return arr2.filter(x => arr1.filter(y => y.isSameAs(x)).length === 0);
}
console.log(getJustUniqueElementsFromArray2(array1, array2));
如果您只需要arr2中的唯一元素并且不使用refs操作基元:
var arr1 = [3,5,67];
var arr2 = [43,5,167];
console.log(arr2.filter(x=> arr1.indexOf(x) === -1)) // print unique elements from arr2