web-dev-qa-db-ja.com

Underscore.js-一意のプロパティ値を取得します

私は最近underscore.jsの力を発見しましたが、私が親切に提案を求める方法にはまだ新しいものです。

これからどのように取得しますか:

[
    [{
        "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
    }]
]

これに:

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

つまり、重複する「名前」プロパティのみはありません。

どんな提案も大歓迎です。

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

(ネストされたリストをフラットなリストに変換し、リスト内の各オブジェクトからnameを選択して、一意にします。)

28
Jakub Roztocil
  • 最初に flatten を使用して、ネストされた配列をフラット配列に変換します。
  • 次に pluck 「名前」の値を配列として取得します
  • 最後に uniq

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

フィドル

10
McGarnagle
var arr = _.uniq(_.map(_.flatten(array), function(e) {
    return e.name;
}));
2
Alex_Crack
_.uniq(_.pluck(x,'name'));

上記のコードは、異なる「名前」属性を抽出するのに十分です

2
Praveen Gubbala

簡単な方法:

1._.mapを使用してすべての名前を取得します

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

2.その名前から_.uniqを取得します

var uniqueNames = _.uniq(names);
1