簡體   English   中英

如何過濾 object 中的數組?

[英]How to filter an array inside an object?

我正在努力在一個條件下過濾object內的數組(在我的情況下,如果 value1 <> value2toggle 為真,則過濾)

myObject = { 
    value: 1, 
    capacitiesArray: [{value1: 10, value2: 10}, {value1: 10, value2: 20}] 
}

所以我的 output 應該是

filtredObject = { 
    value: 1, 
    capacitiesArray: [{value1: 10, value2: 20}] 
}

我創建了這個名為“filterObject”的 function,它在參數“myObject”和“toggle”中具有(如果切換為 true,則過濾器“capacitiesArray”,否則不過濾“capacitiesArray”

我試圖這樣做,但它似乎不起作用:(

我想我遇到了 object 突變的問題

function filterObject(myObject: MyObject, toggle: boolean): MyObject {
if(toggle) {
  const rows = myObject.capacitiesArray; 
  const capacitiesArray = rows.filter((row) => row.value1 !== row.value2); 
  myObject.capacitiesArray = capacitiesArray; 
  return myObject; 
  } 
return myObject; 
}

這是用於對 function https 進行單元測試的代碼鏈接://stackblitz.com/edit/github-test-run-draft-gczdsg?file=src%2Fapp%2Fapp.component.spec.ts

在 app.component.spec.ts

第二個測試“filterRowOnCosCoeValue 應該在打開通過時過濾操作容量(這很好,因為預期的結果是“ expectedOperationalNoticeMock ”)

但是當我按預期提供object結果時,它不應該通過(無論如何它都會通過給出誤報結果)

任何幫助/建議? :) 謝謝!

編輯:添加誤報測試通過的詳細信息

正如您所指出的那樣,由於 object 突變問題。 您可能知道 Javascript 中的Objects是通過引用。 如果您對Object進行變異,簡單的比較不會顯示任何變化,因此您必須進行深度比較。

在您的測試中嘗試以下操作:

  it('filterRowOnCosCoeValue should filter operationalCapacities when toggle on', () => {
    const expectedResult = JSON.stringify(operationalNoticeMock);
    const result = JSON.stringify(filterObject(operationalNoticeMock, true));
    expect(result).toEqual(expectedResult);
  });

我已經分叉了stackblitz

編輯

現在測試失敗了,但是如果你用 expectedOperationalNoticeMock 替換這個值就會通過。

更改此行:

const expectedResult = JSON.stringify(operationalNoticeMock);

通過這個:

const expectedResult = JSON.stringify(expectedOperationalNoticeMock);

它會按預期通過。

我試過了,它對我有用:

 let obj = { h: "any", arr: [{ value1: 10, value2: 10 }, { value1: 10, value2: 20 }] } let rows = obj.arr; obj.arr = rows.filter(v => v.value1.== v;value2). console;log(obj);

暫無
暫無

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

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