我是編碼的新手。我有一個問題并尋求幫助。所以,我想將兩個陣列與一些共同的元素合并到兩者中。我希望在不使用任何陣列方法的情況下洗掉兩個陣列元素的輸出,如下所示:
var array1 = [1,4,6,7,3,8,9,2,10,11,5,19,20]; var array2 = [5,37,11,23,20,15,6,1,91];
var 輸出 = [1,2,3,4,5,6,7,8,9,10,11,15,19,20,23,37,91]
我試過這樣的事情:
var array1 = [1,4,6,7,3,8,9,2,10,11,5,19,20]; //4,7,3,8,9,2,10,19 only in array1
var array2 = [5,37,11,23,20,15,6,1,41]; //37,23,15,41 only in array2
var common = []; //should be [1,6,11,5,20]
var different = []; //should be [4,7,3,8,9,2,10,19,37,23,15,41]
for (i=0; i<=(array1.length-1); i )
{
for(j=0; j<=(array2.length-1); j )
{
if (array1[i] == array2[j])
{
common[i] = array1[i];
break;
}
}
for(j=0; j<=(array2.length-1); j )
{
if ((array1[i] != array2[j]) && (array1[i] == common[i]))
{
continue;
}
else if ((array1[i] == array2[j]) && (array1[i] == common[i]))
{
continue;
}
else if ((array1[i] == array2[j]) && (array1[i] != common[i]))
{
common[i] = array1[i];
}
else if ((array1[i] != array2[j]) && (array1[i] == different[i]))
{
continue;
}
else if ((array1[i] != array2[j]) && (array1[i] != different[i]))
{
different[i] = array1[i];
}
}
}
console.log(common);
console.log(different);
使用上面的代碼,我得到的結果是這樣的:
預期結果:array common = [1,6,11,5,20] array different = [4,7,3,8,9,2,10,19,37,23,15,41]
實際結果:array common : [1, empty, 6, empty × 6, 11, 5, empty, 20] (也必須洗掉空格) array different : [empty, 4, empty, 7, 3, 8, 9、2、10、空×2、19]
現在,我也需要合并這兩個結果陣列。
// same with no empty spaces in resultant array of same elements
var array1 = [1,4,6,7,3,8,9,2,10,11,5,19,20];
var array2 = [5,37,11,23,20,15,6,1,91];
var common = [];
var different = [];
for (i=0; i<=(array1.length-1); i )
{
for (j=0; j<=(array2.length-1); j )
{
if ((array1[i] == array2[j]) && (array1[i] != common[i]))
{
common[common.length] = array1[i];
}
else if ((array1[i] == array2[j]) && (array1[i] == common[i]))
{
break;
}
}
}
console.log(common);
console.log(different);
試圖洗掉空格,我得到了一個公共元素陣列的結果,但無法為另一個陣列做到這一點:
實際結果:陣列 common : [1, 6, 11, 5, 20]
有人可以幫我嗎?
uj5u.com熱心網友回復:
使用 concat 合并兩個陣列。您可以制作一組以洗掉重復項。
var array1 = [1,4,6,7,3,8,9,2,10,11,5,19,20]; //4,7,3,8,9,2,10,19 only in array1
var array2 = [5,37,11,23,20,15,6,1,41];
let unique = [...new Set(array1.concat(array2))];
console.log(unique)
uj5u.com熱心網友回復:
好的,我們不允許使用陣列方法,但也許我們可以使用物件方法?
const array1 = [1,4,6,7,3,8,9,2,10,11,5,19,20];
const array2 = [5,37,11,23,20,15,6,1,41];
const addArray = (arr, obj = {}) => {
for (i=0; i<=(arr.length-1); i = 1) {
obj[arr[i]] = true;
};
return obj;
}
// --- unique
let obj1 = addArray(array1);
obj1 = addArray(array2, obj1);
const unique = Object.keys(obj1);
console.log('unique:', ...unique);
// --- commons
const obj2 = addArray(array1);
const commonObj = {};
for (i=0; i<=(array2.length-1); i = 1) {
if (obj2[array2[i]]) commonObj[array2[i]] = true;
};
const commons = Object.keys(commonObj);
console.log('commons:', ...commons);
// --- differents
const obj3 = addArray(array1);
const differentObj = {};
for (i=0; i<=(array2.length-1); i = 1) {
if (!obj3[array2[i]]) differentObj[array2[i]] = true;
};
const differents = Object.keys(differentObj);
console.log('differents:', ...differents);
.as-console-wrapper{min-height: 100%!important; top: 0}
uj5u.com熱心網友回復:
據我了解,您想洗掉任何形式的重復項,并且永遠不要將它們添加到 end 陣列中,但是您希望最終將重復項與唯一值合并。
所以總而言之,您希望得到一個只有唯一值的陣列。
如果將值添加到陣列中,我正在使用一個物件來跟蹤。我還使用輔助方法分解了代碼,這樣我就可以毫不費力地添加更多陣列作為引數。
我最終回傳了最終結果——作為一個陣列——也回傳了物件。
我對回傳值做了一些詭計,但我認為你可以通過查看它來理解它的作用。如果您想了解更多關于它的資訊,它被稱為解構賦值。
var array1 = [1, 4, 6, 7, 3, 8, 9, 2, 10, 11, 5, 19, 20]; //4,7,3,8,9,2,10,19 only in array1
var array2 = [5, 37, 11, 23, 20, 15, 6, 1, 41]; //37,23,15,41 only in array2
function mergeUniqueValues(arr1, arr2) {
let uniqueArr = [];
let checkDuplicateObj = {};
[uniqueArr, checkDuplicateObj] = helper(arr1, uniqueArr, checkDuplicateObj);
[uniqueArr, checkDuplicateObj] = helper(arr2, uniqueArr, checkDuplicateObj);
return [uniqueArr, checkDuplicateObj];
}
function helper(arr, uniqueArr, checkDuplicateObj) {
for (let value of arr) {
if (checkDuplicateObj[value]) {
checkDuplicateObj[value] ;
} else {
uniqueArr[uniqueArr.length] = value; // same as uniqueArr.push(value);
checkDuplicateObj[value] = 1;
}
}
return [uniqueArr, checkDuplicateObj];
}
let [uniques, checkDuplicateObj] = mergeUniqueValues(array1, array2);
console.log({uniques}); // [1, 4, 6, 7, 3, 8, 9, 2, 10, 11, 5, 19, 20, 37, 23, 15, 41]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/451013.html
標籤:javascript 数组 循环 for循环 合并
上一篇:從字串串列中查找最常用的單詞
下一篇:將字串轉換為ByteBuffer
