簡體   English   中英

在javascript中的另一個數組中獲取匹配項時從數組中刪除元素

[英]Remove elements from an array when get a match in another array in javascript

我在 javascript 中有 2 個數組

數組 1

var columns=[{name: 'id', default: true}, {name: 'type', default: true},{name: 'typeName', default: true}, {name: 'client', default: false}];

陣列 2

var unSelect=["id", "type", "typeName"]

現在我想要一個新數組,即Array 3 ,其中只有不匹配的元素匹配,即column name

在這種情況下

var array 3=[{name: 'client', default: false}]

我嘗試過拼接,但我的索引不匹配。

這是使用Array.prototype.map函數執行此操作的最簡單方法。 這個函數可以迭代一個數組並在每次迭代時返回你想要的。

var array3 = columns.map(function(item) {

   if (unselected.indexOf(item.name) < 0)   //see if the name of an element object is in the unselected array
     return item;                           // if yes, return the element 
})

嘗試使用過濾器作為

var unSelect=["id", "type", "typeName"];
var array3 = columns.filter(function(obj){
  return unSelect.indexOf( obj.name ) == -1;
});

演示

 var columns = [{ name: 'id', default: true }, { name: 'type', default: true }, { name: 'typeName', default: true }, { name: 'client', default: false }]; var unSelect = ["id", "type", "typeName"]; var array3 = columns.filter(function(obj) { return unSelect.indexOf(obj.name) == -1; }); console.log(array3);

您可以使用哈希表作為不需要的項目的參考,以便比indexOf更快地訪問。

 var columns = [{ name: 'id', default: true }, { name: 'type', default: true }, { name: 'typeName', default: true }, { name: 'client', default: false }], unSelect = ["id", "type", "typeName"], hash = Object.create(null), result; unSelect.forEach(function (a) { hash[a] = true; }); result = columns.filter(function (a) { return !hash[a.name]; }); console.log(result);

這將是我使用Array.prototype.filter()Array.prototype.some()組合的解決方案。

 var columns = [{name: 'id', default: true}, {name: 'type', default: true},{name: 'typeName', default: true}, {name: 'client', default: false}], unSelect = ["id", "type", "typeName"], filtered = columns.filter(f => !unSelect.some(e => e == f.name)); console.log(filtered);

暫無
暫無

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

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