Pregunta

I only recently discovered the power of underscore.js, still new to the methods I kindly ask for a suggestion:

How do I get from this:

[
    [{
        "name": "Type 2",
        "id": 14
    }],
    [{
        "name": "Type 1",
        "id": 13
    }, {
        "name": "Type 3",
        "id": 15
    }],
    [{
        "name": "Type 2",
        "id": 14
    }],
    [{
        "name": "Type 1",
        "id": 13
    }]
]

to this:

["Type 1","Type 2","Type 3"]

i.e. no duplicated and "name" property only.

Any suggestions much appreciated.

¿Fue útil?

Solución

_(data).chain().flatten().pluck('name').unique().value()

(Convert the nested lists to a flat one, pick name from each of the objects in the list, and make it unique.)

Otros consejos

  • Use flatten first, to convert the nested array to a flat array.
  • Then pluck to get the "name" values as an array
  • Finally uniq

_.uniq(_.pluck(_.flatten(items), "name"))

Fiddle

_.uniq(_.pluck(x,'name'));

the above code is sufficient for extracting different "name" attribute

var arr = _.uniq(_.map(_.flatten(array), function(e) {
    return e.name;
}));

Simple way:

1. use _.map to get all the names

var names = _.map(items, function(item) { return item.name});

2. Get the _.uniq from that names

var uniqueNames = _.uniq(names);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top