7

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.

3
  • 2
    Just use ng-repeat: <div ng-repeat="person in cast">{{ person.name }}</div> edit: <span> might be better for you here Commented Sep 4, 2015 at 21:35
  • does ng-repeat not work? Commented Sep 4, 2015 at 21:35
  • For ng-repeat, how will I join the strings by comma? Commented Sep 4, 2015 at 22:30

2 Answers 2

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>
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks, it simplified my code. But are there any dangers associated with using Array.prototype.map regarding compatibility?
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>

1 Comment

But how I'll insert joining commas in between items if I use ng-repeat?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.