2016-11-20 151 views
0

我有一個包含項目的數組。如何篩選具有相同名稱但不同值的項目的數組?

我做這個數組通過使用此功能收集表單數據:

getFormdata : function(form) { 
     var formdata = $(form) 
      .serializeArray() 
      .filter(function (item) { 
       return item.name != "__RequestVerificationToken" 
      }); 

     return formdata; 
    } 

當我在形式的複選框,當檢查我得到其中一個有值的數組中的兩個項目

真正

和其他有

我使用jquery過濾functon到濾鏡陣列,但我想不通我怎麼能discared具有價值

虛假項目

陣列的不必要的結果:

enter image description here

我嘗試:

getFormdata : function(form) { 
     var formdata = $(form) 
      .serializeArray() 
      .filter(function (item) { 
       return item.name != "__RequestVerificationToken" && (item.name == "IsActive" && item.value != "false"); 
      }); 

     return formdata; 
    } 

但這種過濾掉所有元素,而不僅僅是一個我想移除。

我該怎麼做?

編輯:

項目NR 2,如果有兩個項目具有相同的名稱應該只被刪除。 如果我只有一個名稱爲「IsActive」的項目,則不應刪除第2個數字

+0

你能不能給我們輸入數組的個例和axpected結果 –

+0

我有,你看不出來的形象呢? desiered結果基本相同,但沒有第nr 2 – ThunD3eR

+0

,所以你有2個屬性的名稱和值,但你想要什麼結果?也許是其他圖片 –

回答

1

如果兩個 「IsActive」 的存在,去除僞之一。否則,請保持獨立。 添加了刪除驗證令牌。 在第二個濾波器之前移動檢查值!=「false」,可能會使條件和增益性能短路。

var test = [ 
 
    { name: "__RequestVerificationToken", value: "whatever" }, 
 
    { name: "IsActive", value: "true" }, 
 
    { name: "updateRate", value: "sss" }, 
 
    { name: "IsActive", value: "false" }, 
 
    { name: "somethingElse", value: "weee" } 
 
]; 
 

 
console.log(test.filter(function(element, index, array){ 
 
    return element.name != "__RequestVerificationToken" && (
 
      element.value != "false" 
 
      || array.filter(function(element2){ 
 
       return element2.name == element.name 
 
      }).length < 2 
 
     ); 
 
})); 
 

 
var test = [ 
 
    { name: "__RequestVerificationToken", value: "whatever" }, 
 
    { name: "updateRate", value: "sss" }, 
 
    { name: "IsActive", value: "false" }, 
 
    { name: "somethingElse", value: "weee" } 
 
]; 
 

 
console.log(test.filter(function(element, index, array){ 
 
    return element.name != "__RequestVerificationToken" && (
 
      element.value != "false" 
 
      || array.filter(function(element2){ 
 
       return element2.name == element.name 
 
      }).length < 2 
 
     ); 
 
}));

+0

你是對的錢,我有點快,並接受了其他答案這是一個很好的嘗試,這個問題並沒有包括所有信息@Nina Scholz張貼她的答案時 – ThunD3eR

0

您可以先檢查是否存在活動項目,然後在稍後檢查過濾時使用它。

function filter(array) { 
 
    var isActive = array.some(function (item) { 
 
      return item.name === "IsActive" && item.value === "true"; 
 
     }); 
 
    return array.filter(function (item) { 
 
     return (
 
      item.name !== "__RequestVerificationToken" && item.name !== "IsActive" || 
 
      item.name === "IsActive" && (item.value === "true" || !isActive) 
 
     ); 
 
    }); 
 
} 
 

 
var data0 = [{ name: 'IsActive', value: 'true' }, { name: 'IsActive', value: 'false' }, { name: 'Name', value: 'sss' }, { name: 'UpdateRate', value: '121212' }, { name: '__RequestVerificationToken', value: 'true' }, { name: '__RequestVerificationToken', value: 'false' }], 
 
    data1 = [{ name: 'IsActive', value: 'false' }, { name: 'Name', value: 'sss' }, { name: 'UpdateRate', value: '121212' }, { name: '__RequestVerificationToken', value: 'true' }, { name: '__RequestVerificationToken', value: 'false' }]; 
 

 
console.log(filter(data0)); 
 
console.log(filter(data1));
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

這個伎倆。我必須在閱讀時說,我認爲它不能正確,因爲你排除了「IsActive」的財產,但第二條線進場。好一個! – ThunD3eR

+0

是的,在第一個檢查中排除幷包含在第二個檢查中。 –

+0

這看起來有缺陷。如果它是列表中唯一的IsActive,那麼原來的帖子就會說IsActive包含錯誤。如果該邏輯是錯誤的並且是唯一的,則該邏輯將移除它。 – Taplar

相關問題