检测空对象数组

时间:2018-08-22 13:22:56

标签: powershell azure-devops

我正在调用此处记录的VSTS拉取请求查询:https://docs.microsoft.com/en-us/rest/api/vsts/git/pull%20request%20query/get?view=vsts-rest-4.1

它返回结果的对象数组。我想检测何时没有返回结果并做出相应的反应。我以为可以检查response.results.length,但是即使没有结果也将是1。它返回一个由1个空对象组成的数组。我很难检测到这种情况。我想到的一个解决方案是:

    if(($pullRequests.results | Get-Member -MemberType Properties).Length -eq 0){some code}

由于香草ps对象具有4个成员,并且填充的对象具有附加的note属性,因此它将起作用。我的方法似乎有点荒谬,有没有更好的方法?

我尝试检查长度,存在性和布尔值:


    PS> $pullRequests.results[0].Length
    1
    PS> $temp = $pullRequests.results[0]
    PS> $temp | Get-Member

    TypeName: System.Management.Automation.PSCustomObject

    Name        MemberType Definition
    ----        ---------- ----------
    Equals      Method     bool Equals(System.Object obj)
    GetHashCode Method     int GetHashCode()
    GetType     Method     type GetType()
    ToString    Method     string ToString()

    PS> $temp -eq $null
    False
    PS> if($temp){"YAY"}else{"BOO"}
    YAY

2 个答案:

答案 0 :(得分:1)

这听起来像API中的错误。解决方法是,检查 properties (与还包括方法的 members 相反)似乎是正确的方法。完成此ix的最简单方法如下:

// test imports, component import, module import
describe('DumbComponent', () => {
  let component: DumbComponent;
  let fixture: ComponentFixture<DumbComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [
        CommonModule,
        ReactiveFormsModule,
        MyModule,
        DumbComponent
      ]
    })
    .compileComponents();

    fixture = TestBed.createComponent(DumbComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  }));

  it('should create', () => {
    expect(component).toBeTruthy();
  });

});

答案 1 :(得分:0)

哦,那太臭了。

Lemme确保我了解您的问题。返回数据时,您期望的对象看起来像以下内容:

$full_collection_ps_objects = `
    @([PSCustomObject]@{a=1;b=2}, [PSCustomObject]@{a=1;b=3})

psobject的集合。

当没有数据返回时,您将获得一个带有一个空psobject的对象数组:

$empty_collection_ps_objects = @([PSCustomObject]@{})

我认为您钉牢了。财产数量是一个很好的指标。我有点神经质。这可能使我感到疑惑,另一个默认属性可能会在以后出现。我可能会考虑寻找特定的字段名称,这种主键类似于:

if( $($empty_collection_ps_objects | Get-Member).Name -contains 'a' ) { $true }
if( $($full_collection_ps_objects | Get-Member).Name -contains 'a' ) { $true }