2016-04-26 52 views
0

pickListSelect arraysource arrayのオブジェクトを削除するためのすべてのID(数字)を持ち、から削除された要素をプッシュします。JavascriptでIDを使用して配列から項目を削除する

function copy(pickListSelect, source, target) { 

     var i, id; 

     for (i = 0; i < pickListSelect.length; i++) { 
       id = pickListSelect[i];    
       source.splice(id,1); 
     } 
     pickListSelect = []; 
    } 

だから、source arraから特定のオブジェクトを削除する必要があります。私はそのコードで試してみましたが、たとえばid = 5のオブジェクトを削除する必要がある場合、リストから項目5が削除されました。

あなたはどのでスプライスおよびスプライスする項目の量開始インデックスを渡す必要があり.splice使用
[Object, Object, Object, Object, Object, Object, Object, Object, Object] 
    0:Object 
    plantId:1 
    plantName:"Plant 1" 

...the rest of others are similar object 

答えて

3

はあなたのsourceplantIdによって最初に植物を見つけ、その後、元の配列から削除し、ターゲットにプッシュする必要があります。コンソールを開き、それが削除された植物をログに記録する必要がありますあなたは、一致するidを持つソース配列のインデックスを

var plants = [ 
 
    { 
 
     plantId: 1, 
 
     plantName: 'plant 1' 
 
    }, 
 
    { 
 
     plantId: 2, 
 
     plantName: 'plant 2' 
 
    }, 
 
    { 
 
     plantId: 3, 
 
     plantName: 'plant 3' 
 
    }, 
 
    { 
 
     plantId: 4, 
 
     plantName: 'plant 4' 
 
    } 
 
]; 
 

 
function copy(pickListSelect, source, target) { 
 
    var i, id, el; 
 

 
    for (i = 0; i < pickListSelect.length; i++) { 
 
     id = pickListSelect[i]; 
 
     el = findPlant(source, id); 
 
     source.splice(source.indexOf(el), 1); 
 
     target.push(el); 
 
    } 
 
} 
 

 
function findPlant (arr, id) { 
 
    return arr.filter(function (plant) { 
 
     return plant.plantId == id 
 
    })[0] 
 
} 
 

 
var test = []; 
 

 
copy([2,3], plants, test); 
 

 
console.log(test);

+0

これは完全に機能します。ありがとう。 –

2

、これを試してみてください:

ソース配列の構造はこれですあなたは、IDが一致し、その後、かどうかを確認する必要があり、あなたの実際のコードで今すぐ

source.splice(i,1); // i is your starting index here array.splice(start, deleteCount[, item1[, item2[, ...]]]) 

MDN on .splice

上記のコードを使用してスプライス:

function copy(pickListSelect, source, target) { 

    var i, id; 

    for (i = 0; i < pickListSelect.length; i++) { 
      if (pickListSelect[i].id === someId) {    
      source.splice(i,1); 
      } 
    } 
    pickListSelect = []; 
} 
+0

参照... idが同じかどうかを確認する必要があります – JordanHendrix

+0

"pickListSelect"配列には削除するすべてのIDのみが含まれています。 "source"はオブジェクトの配列で、各オブジェクトにはIDとプラント名のプロパティが含まれています。 –

+0

ソースをループ... – JordanHendrix

1

まで見ていません。このようなことを行う方がよいかもしれません。

var idsToRemove = {}; 

// build an object of ids to remove (effectively a hashset) 
for (var i = 0; i < pickSelectList.length; i++) { 
    idsToRemove[pickSelectList[i]] = true; 
} 

// loop through the source array to find any objects with ids to remove 
for (var j = 0; j < source.length; j++) { 
    if (source[j].plantId in idsToRemove) { 
     target.push(source.splice(j, 1)); 
    } 
} 
1

このフィドラーは、hereです。 私はunderscore.jsを使用してソースから正しい要素を見つけ、それをターゲット配列に移動しました。

var copy = function(pickListSelect, source, target) { 
    for (i = 0; i < pickListSelect.length; i++) { 
     id = pickListSelect[i]; 
     var deleteIndex = _.findIndex(source, {Id: id}); 
      var deletedItem = source.splice(deleteIndex, 1); 
      target.push(deletedItem[0]) 
    } 
     pickListSelect = []; 
    return target; 
    } 
関連する問題