Search code examples
javascriptangularjsangular-filters

AngularJS: Neat way to print array as string


I have a following array:

"cast": [
      {
        "name": "James Stewart"
      },
      {
        "name": "Kim Novak"
      },
      {
        "name": "Barbara Bel Geddes"
      },
      {
        "name": "Tom Helmore"
      }
    ]

What is the neat in AngularJS to to format it as:

James Stewart, Kim Novak, Barbara Bel Geddes, Tom Helmore

Is there a way to use filter or formatter so that I can neatly do it in template like:

<font class="authors-string">{{ object.cast | filter/formatter/? }}</font>

I think writing logic for this simple parsing in controller would clutter controller body.

Thanks for your interest.


Solution

  • This is a filter that extracts a certain prop from each array element, then joins them using a separator (demo):

    app.filter('join', function () {
        return function join(array, separator, prop) {
            if (!Array.isArray(array)) {
                return array; // if not array return original - can also throw error
            }
    
            return (!angular.isUndefined(prop) ? array.map(function (item) {
                return item[prop];
            }) : array).join(separator);
        };
    });
    

    Usage:

    <p class="authors-string">{{ cast | join:', ':'name' }}</p>
    

    If it is a flat array, you drop the 3rd parameter:

    <p class="authors-string">{{ animals | join:', ' }}</p>