2017-04-20 17 views
1
Array1 = [ name1, name2]; 
Array2 = [ { name: name1 , id: 1, location: xyz, address: 123 }, 
      { name: name2 , id: 2, location: abc, address: 456 }, 
      { name: name3 , id: 3, location: def, address: 234 }, 
      { name: name4 , id: 4, location: ghi, address: 789 } 
     ]; 

私は2つの配列--Array1とArray2を持っています。 Array1を使用してArray2をフィルタリングして、出力が - [ { name: name1 , id: 1 }, { name: name2 , id: 2 }]となるようにします。私はこのようにしようとしました - var ids = _.pluck(_.filter(Array2, a => _.contains(Array1, a.id)), 'id');しかし、これは一度に1つのことを与えているに過ぎません。一度に名前またはIDまたは位置またはアドレスを取得できるだけですが、名前とIDの両方を一度にフィルタリングする必要があります。別の配列を使用して配列をフィルタリングする

+0

試み 'Array2.filter(関数(アイテム){戻りArray1.indexOf(item.name)})' – gurvinder372

+0

可能重複http://sourceforge.net/subtract-arrays-javascript/testoverflow.com/questions/21509474/subtract-arrays-javascript) – Alessandro

答えて

1

2番目の配列をループし、各項目のルックアップに最初のループが含まれているかどうかを調べます。含まれている場合、includesはtrueを返し、その要素は新しい配列になります。

が、これは代わりに、それだけで.reduceを使用し、.map.filterを有する、その後のES6

var arr1 = [ 'A', 'B']; 
 
var arr2 = [ { name: 'A' , id: 1,address: 123 }, 
 
      { name: 'B' , id: 2, address: 456 }, 
 
      { name: 'C' , id: 3, address: 234 }, 
 
      { name: 'D' , id: 4,address: 789 } 
 
     ]; 
 
      
 
var newArr = arr2.filter(item => arr1.includes(item.name)).map(item => ({ name: item.name, id: item.id})); 
 

 
console.log(newArr);

0

でのみ動作しますので注意してください。古いブラウザをサポートする必要があれば、あなたがindexOf代わりのincludesを使用することができ、

var Array1 = ["name1", "name2"]; 
 
var Array2 = [{ 
 
    name: "name1", 
 
    id: 1, 
 
    location: "xyz", 
 
    address: 123 
 
    }, 
 
    { 
 
    name: "name2", 
 
    id: 2, 
 
    location: "abc", 
 
    address: 456 
 
    }, 
 
    { 
 
    name: "name3", 
 
    id: 3, 
 
    location: "def", 
 
    address: 234 
 
    }, 
 
    { 
 
    name: "name4", 
 
    id: 4, 
 
    location: "ghi", 
 
    address: 789 
 
    } 
 
]; 
 

 
var result = Array2.reduce((arr, cur) => { 
 
    if(Array1.includes(cur.name)) { 
 
    arr.push({ 
 
     name: cur.name, 
 
     id: cur.id 
 
    }) 
 
    } 
 
    return arr 
 
}, []) 
 

 
console.log(result)

注:reduceincludesを使用して

は、あなたがこのようなものを持つことができます。

0

フィルタリングするアイテムに希望の名前が含まれているかどうかを迅速に確認するために、ハッシュテーブルを使用できます。 //:(HTTP - [JavaScriptの配列を減算]の

var array1 = ['name1', 'name2'], 
 
    array2 = [{ name: 'name1', id: 1, location: 'xyz', address: 123 }, { name: 'name2', id: 2, location: 'abc', address: 456 }, { name: 'name3', id: 3, location: 'def', address: 234 }, { name: 'name4', id: 4, location: 'ghi', address: 789 }], 
 
    result = array2.filter(function (a) { 
 
     var hash = Object.create(null); 
 
     a.forEach(function (k) { hash[k] = true; }); 
 
     return function (b) { return hash[b.name]; }; 
 
    }(array1)); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

関連する問題