簡體   English   中英

如果不在第二個陣列中,則從一個陣列中刪除項目

[英]Remove items from one array if not in the second array

我說我在寫這篇文章之前已經嘗試了很長時間。

對於InDesign腳本,我正在使用兩個ListItem數組。 現在我正在嘗試刪除不在第二個數組中的一個數組的項目,但我被卡住了。

鑒於我使用以下javascript代碼(它很好用)刪除兩個數組之間的相等項:

function check_dupli(arr_A, arr_B) {
    for(var i = arr_B.length - 1; i >= 0; i--) {
        for(var j = 0; j < arr_A.length; j++) {
            if(arr_B[i] === arr_A[j]) {
                arr_B.splice(i, 1);
            }
        }
    }
    arr_B.sort();
}

arr_A = ["a","b","d","f","g"]
arr_B = ["a","c","f","h"]

check_dupli(arr_A, arr_B) --> arr_B = ["c","h"]
check_dupli(arr_B, arr_A) --> arr_B = ["b","d","g"]

我想修改它是為了忽略不在兩個數組中的項目,並獲得我想要的東西,但是出了點問題,因為我也得到了不需要的數據:

function get_dupli(arr_A, arr_B, arr_C) {
    for(var e = arr_B.length - 1; e >= 0; e--) {
        for(var k = 0; k < arr_A.length; k++) {
            if(arr_B[e] === arr_A[k]) {
                arr_C.push(arr_B[e]);
            }
        }
    }
    arr_C.sort();
}

arr_A = ["a","b","d","f","g"]
arr_B = ["a","g","k"]
arr_C = ["h"]

get_dupli(arr_A, arr_B, arr_C) --> arr_C = ["a","g","h","k"] instead of --> ["a","g","h"]
get_dupli(arr_B, arr_A, arr_C) --> arr_C = ["a","b","d","f","g","h"] instead of --> ["a","g","h"]

哪里我錯了? 純javascript還有另一種解決問題的方法嗎?

在此先感謝您的幫助。

您可以使用Array.prototype.filterArray.prototype.concat來簡單地:

 arr_A = ["a","b","d","f","g"] arr_B = ["a","g","k"] arr_C = ["h"] function getCommonItems(arrayA, arrayB, result) { result = result || []; result = result.concat(arrayA.filter(function(item) { return arrayB.indexOf(item) >= 0; })); return result.sort(); } alert(getCommonItems(arr_A, arr_B, arr_C).join(", ")); alert(getCommonItems(arr_B, arr_A, arr_C).join(", ")); 

對於第一種情況:

 arr_A = ["a","b","d","f","g"] arr_B = ["a","c","f","h"] function getDifference(arrayA, arrayB, result) { return arrayB.filter(function(item) { return arrayA.indexOf(item) === -1; }).sort(); } alert(getDifference(arr_A, arr_B).join(", ")); alert(getDifference(arr_B, arr_A).join(", ")); 

像這樣做:

 //the array which will loose some items var ar1 = ["a", "b", "c"]; //the array which is the template var ar2 = ["d", "a", "b"]; var tmpar = []; for(var i = 0; i < ar1.length; i++){ if(ar2.indexOf(ar1[i]) !== -1){ tmpar.push(ar1[i]); } } ar1 = tmpar; alert(ar1); 

我們創建一個臨時數組來存儲有效值。

我們確保第一個數組的值的索引不是“-1”。 如果它是“-1”,則找不到索引,因此該值無效! 我們存儲不是“-1”的所有東西(所以我們存儲每個有效值)。

 Array.prototype.contains = function ( object ) { var i = 0, n = this.length; for ( i = 0 ; i < n ; i++ ) { if ( this[i] === object ) { return true; } } return false; } Array.prototype.removeItem = function(value, global) { var idx; var n = this.length; while ( n-- ) { if ( value instanceof RegExp && value.test ( this[n]) || this[n] === value ) { this.splice (n, 1 ); if ( !global ) return this; } } return this; }; arr_A = ["a","b","d","f","g"]; arr_B = ["a","c","f","h"]; var item while ( item = arr_A.pop() ) { arr_B.contains ( item ) && arr_B.removeItem ( item ); } arr_B; 

 arr_A = ["a","b","d","f","g"]; arr_B = ["a","c","f","h"]; var newArr = []; var item while ( item = arr_B.shift() ) { arr_A.contains ( item ) && newArr[ newArr.length ] = item ; } newArr;// ["a", "f"]; 

Opsss ....我相信我已經給出了答案並關閉了這個帖子...抱歉!

盡管我做了所有檢查,但我的腳本失敗是由於一個愚蠢的錯誤引起的...傳遞給函數的數組arr_A是原始數組的修改副本。

謝謝大家的關心和幫助。 再次抱歉 ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM