3

I have a JSON file that contains a bunch of data:

myData.JSON:

{
"Addresses": {
    "AddressList": [
        {
            "HouseNumber": 201,
            "Street": "Victoria Lane",
            "Postcode": "SW1 8ES"
        },
        {
            "HouseNumber": 10,
            "Street": "Allen Close",
            "Postcode": "NG2 3TD"
        },
        {
            "HouseNumber": 57,
            "Street": "Thomas Street",
            "Postcode": "DR12 6TE"
        },
        {
            "HouseNumber": 57,
            "Street": "Old Lister Street",
            "Postcode": "OL4 5TH"
        },
        {
            "HouseNumber": 45,
            "Street": "Milk Round Street",
            "Postcode": "MK6 4HG"
        },
        {
            "HouseNumber": 102,
            "Street": "Jersey Quarter Avenue",
            "Postcode": "DR12 6TE"
        },
        {
            "HouseNumber": 845,
            "Street": "MR HAPPY STREET",
            "Postcode": "MR3 0FJ"
        }
    ]
}

Im trying to show a div if a match on the returned value from Street is found via a indexOf

HTML:

<div ng-repeat="address in Addresses.AddressList">
    {{ address.HouseNumber }}, {{ address.Street}}, {{ address.Postcode }}
    <div ng-show="address.Street.toLowerCase().indexOf('MR HAPPY STREET') == 0">
        MR HAPPY STREET WAS FOUND
    </div>
    <div ng-show="address.Street.toLowerCase().indexOf('Milk Round Street') == 0">
        Milk Round Street WAS FOUND
    </div>
</div>

This doesnt seem to work. Can you perform such indexOf via an ng-show?

Oam Psy
  • 8,555
  • 32
  • 93
  • 157

3 Answers3

7

Your problem is that you compare 2 strings which are not the same: after use toLowerCase() function your string Milk Round Street looks like milk round street. So indexOf() will return -1. That's why you need to compare 2 strings in lower case, such as:

<div ng-show="address.Street.toLowerCase().indexOf('mr happy street') == 0">

or:

<div ng-show="address.Street.toLowerCase().indexOf(('MR HAPPY STREET').toLowerCase()) == 0">
BSnapZ
  • 314
  • 1
  • 4
  • 13
ababashka
  • 2,101
  • 1
  • 14
  • 15
1

Use This

<div ng-repeat="address in Addresses.AddressList">
    {{ address.HouseNumber }}, {{ address.Street}}, {{ address.Postcode }}
    <div ng-show="showByJs(address,'MR HAPPY STREET')">
        MR HAPPY STREET WAS FOUND
    </div>
    <div ng-show="showByJs(address,'Milk Round Street')">
        Milk Round Street WAS FOUND
    </div>
</div>

in controller write

    $scope.showByJs=function(address, indexofWord){
    if (address.Street.toLowerCase().indexOf(indexofWord) == 0)
    {
       return true;
    }else
     {
       return false
}
    }
Harutyun Abgaryan
  • 2,013
  • 1
  • 12
  • 15
1

you need to check with lowercase of "MR HAPPY STREET" and "Milk Round Street" because you'r trying compare with lowercase of address.Street .

<div ng-repeat="address in Addresses.AddressList">
    {{ address.HouseNumber }}, {{ address.Street}}, {{ address.Postcode }}
    <div ng-show="address.Street.toLowerCase().indexOf(('MR HAPPY STREET').toLowerCase()) == 0">
        MR HAPPY STREET WAS FOUND
    </div>
    <div ng-show="address.Street.toLowerCase().indexOf(('Milk Round Street').toLowerCase()) == 0">
        Milk Round Street WAS FOUND
    </div>
</div>
Kalhan.Toress
  • 21,683
  • 8
  • 68
  • 92