2017-04-04 10 views
2
var list1 =[{user: "A", id: 'a'}, 
      {user: "B", id: 'b'}, 
      {user: "C", id: 'c'}, 
      {user: "D", id: 'd'}, 
      {user: "E", id: 'e'}]; 
var list2 = ["A","B","C"]; 

私は上記2つの配列を持っています。私はlist2を使ってlist1をフィルタリングしたいと思います。私の出力は[{id: 'a'}、{id: 'b'}、{id: 'c'}]または['a'、 'b'、 'c']のみでなければなりません。他の配列を使ってアンダースコアで配列をフィルタリングする

フィルタリングするのに次のようにしていますが、結果が得られません。ここで何が間違っていますか?プレーンなJavaScriptで

var ids = _.filter(list1, function(id) { 
        _.each(list2, function(name){ 
          return id.user === name; 
        }); 
      }); 

答えて

3

、あなただけの配列をフィルタリングして、結果セットにidをマッピングすることができます。プロパティの値を取得するためのアンダースコアの

  • _.pluck
  • _.contains

    var list1 =[{ user: "A", id: 'a' }, { user: "B", id: 'b' }, { user: "C", id: 'c' }, { user: "D", id: 'd' }, { user: "E", id: 'e' }], 
     
        list2 = ["A","B","C"], 
     
        result = list1.filter(a => list2.includes(a.user)).map(a => a.id); 
     
        
     
    console.log(result);

    チェックの値は、配列と

  • _.filterのためにある場合サブセットを返します。 filter内部

var list1 =[{ user: "A", id: 'a' }, { user: "B", id: 'b' }, { user: "C", id: 'c' }, { user: "D", id: 'd' }, { user: "E", id: 'e' }], 
 
    list2 = ["A","B","C"], 
 
    result = _.pluck(_.filter(list1, a => _.contains(list2, a.user)), 'id'); 
 
    
 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

2

機能boolean型の意味 "それを維持する" または "それを維持していない" を返す必要があります。 eachは配列の各要素に対して操作を実行しますが、何も返しません。

var ids = _.filter(list1, function(id) {  
    return _.find(list2, function(name) { return id.user === name; }); 
}); 
map

を使用し、IDのみを抽出する:

Aは単に修正代わりeachfindを使用することである

ids = ids.map(function(user){ return user.id }); 
関連する問題