AngularJS: Neat way to print array as string
Asked Answered
B

2

6

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.

Bradney answered 4/9, 2015 at 21:32 Comment(3)
Just use ng-repeat: <div ng-repeat="person in cast">{{ person.name }}</div> edit: <span> might be better for you hereRife
does ng-repeat not work?Webby
For ng-repeat, how will I join the strings by comma?Bradney
T
14

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>
Trinitrotoluene answered 4/9, 2015 at 21:40 Comment(1)
Thanks, it simplified my code. But are there any dangers associated with using Array.prototype.map regarding compatibility?Bradney
S
3

You can use 'ng-repeat' - https://docs.angularjs.org/api/ng/directive/ngRepeat

An example would be:

<div ng-repeat="(key, value) in myObj"> ... </div>

To add a comma on all but the last value:

<div ng-repeat="(key, value) in myObj"> ... <span ng-if="!$last">, </span></div>
Stonework answered 4/9, 2015 at 21:42 Comment(1)
But how I'll insert joining commas in between items if I use ng-repeat?Bradney

© 2022 - 2024 — McMap. All rights reserved.