簡體   English   中英

從另一個數組中刪除基於數組的對象

[英]Remove object from array based from another array

這是我的第一個數組的結構:

var myArray = [1,Firstname,Lastname];

我的第二個數組由具有屬性的對象組成:

var mySecondArray = [object, object, object];

當您展開它時,在第一個數組對象上將顯示如下內容:

Id = 1
FirstName = Test
LastName = TestLastName

我需要從第一個數組中刪除具有相同id的對象。 我嘗試使用此方法,但沒有運氣:

// if condition
myArray.splice(mySecondArray[x].ID, 1);

任何想法?

編輯

這就是整個想法。 我有所有項目(對象)的數組,並且有無效項目的數組(在這種情況下,這是字符串數組)

var originalLength = validRowsArray.length;
for (var x = 0; x < invalidRowsArray.length; x++) {
    for (var y = 0; y < originalLength; y++) {
        if (validRowsArray[x].ID != invalidRowsArray[y][0]) { // 0 is the position of ID
            validRowsArray.splice(validRowsArray[x], 1);
        }
    }
}

您正在使用第二個數組中對象的屬性作為要拼接的對象的參數:

myArray.splice(mySecondArray[x].ID, 1);

但是您應該傳遞給splice的第一個參數是要在其包含數組中刪除的對象的索引

在偽代碼中,您的算法應執行以下操作:

for each item in array_a
  look for a match in array b
  determine the index of the matching object in array b
  splice one item at that index from array b

myArray.splice(mySecondArray[x].ID, 1); 可以是任何值,並且與splice()所需的數組索引無關

假設您知道索引,並且它是x只需使用

myArray.splice(x, 1);

目前尚不清楚您如何定義x

我認為您可以使用一個接頭,導致2個數組,是一個對象和一個數組,所以,在這里您可以找到答案,但是當不包括數組時,只需在最后添加它,否則只需替換rigth?這個:

var myArray = [1,Firstname,Lastname]; //array user*
var mySecondArray = [object, object, object]; //array with objects(user)

Array.prototype.insertArray = function ( myArray ){
    var addMyArray = true;
    for(var i=0; i<this.length; i++){
        //compare 2 Id's
        if(this[i].Id == myArray[0]){ //if equals -> replace
            this[i].FirstName = myArray[1];
            this[i].LastName = myArray[2];
            addMyArray = false;
        }
    }
    //in case you array is not in your 'secondarray' it should be added right?
    if(addMyArray){
        this.push( {Id:myArray[0], FirstName:myArray[1], LastName:myArray[2]} );
    }
}

//Note: call your function after write prototype always

mySecondArray.insertArray( myArray );
//check right answer :)
console.log(mySecondArray)

使用反向for循環可確保刪除時不會錯過任何元素。

然后使用some命令檢查當前元素是否存在於無效數組中。

使用索引作為第一個參數進行拼接 ,然后將其作為第二個參數。

 var invalidRowsArray = [ [2, 'foo2', 'bar2'] ]; var validRowsArray = [{ Id: 1, FirstName: 'foo', LastName: 'bar' }, { Id: 2, FirstName: 'foo2', LastName: 'bar2' }, { Id: 3, FirstName: 'foo3', LastName: 'bar3' }]; for (var i = validRowsArray.length; i--;) { var exist = invalidRowsArray.some(function(element) { return element[0] == validRowsArray[i].Id; }) if (exist) validRowsArray.splice(i, 1) } console.log(validRowsArray); 

如您所說,“如果第一個數組具有相同的ID,則需要刪除該對象”,第一個數組不應該僅由數字組成嗎? 無論如何,如果您想從第二個數組中刪除對象並擁有索引,則可以通過這種方式進行操作,

delete mySecondArray[x]

作為myarray [x] == mySecondArray [x] .Id 工作提琴

暫無
暫無

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

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