2016-10-26 10 views
1

私はフィルタリングされたIDを1つの配列に持ち、すべてのデータを別の配列のオブジェクトに格納しています。私は値の配列に記載されたフィルタリングされたID値を表示したい。これについてjavascriptの値でオブジェクトの配列をフィルタリングするには?

var allData = [ 
    { 
     id:'10', 
     name:'jhon' 
    }, 
    { 
     id:'11', 
     name:'lewis' 
    }, 
    { 
     id:'12', 
     name:'taylor' 
    }, 
    { 
     id:'13', 
     name:'adam' 
    }, 
    { 
     id:'14', 
     name:'bolive' 
    } 
]; 

var addedIds = ['10', '12', '14']; 

私のjavascriptのコード、

allData.filter(data, function (item) { 
    item.map(function(list, i) { 
     if (list.id.indexOf(addedIds[i]) === -1) { 
      return; 
     } 
     console.log(list); 
    }); 
}); 
+0

あなたはこの 'addedIds [i]は'行い、そしてなぜあなたはi'が関連している 'だと思いますどう思いますかこの文脈でのインデックス? – njzk2

+0

'addedIds'にリストされている各idの名前を出力したいのですか? – DaniP

+0

私の結果は次のようになります:[{id: "10"、名前: 'jhon'}、{id: "12"、名前: 'taylor'}、{id: "14"、名前: 'bolive'} ] – Sathya

答えて

4

var allData = [ 
 
    { 
 
     id:'10', 
 
     name:'jhon' 
 
    }, 
 
    { 
 
     id:'11', 
 
     name:'lewis' 
 
    }, 
 
    { 
 
     id:'12', 
 
     name:'taylor' 
 
    }, 
 
    { 
 
     id:'13', 
 
     name:'adam' 
 
    }, 
 
    { 
 
     id:'14', 
 
     name:'bolive' 
 
    } 
 
]; 
 

 
var addedIds = ['10', '12', '14']; 
 

 
var allData = allData.filter(function (item) { 
 
    if (addedIds.indexOf(item.id) !== -1) return item; 
 
}); 
 

 
console.log(allData);

+0

また、私はキーによるフィルタ検索をどのように達成できますか?検索は、キーIDまたはキー名でフィルタリングできます。 – Sathya

+0

はい、可能です。この場合、オブジェクトの配列ではなく、indexOfだけが配列を必要とします。 –

+0

これは正しいですか? var allData = allData.filter(function(item){ if($( 'input').Val()。indexOf(item.id)!== -1 || $( 'input')。 indexOf(アイテム名)!== -1)返品アイテム; }); – Sathya

7

どのように?

Array.prototype.filterは、1つのパラメータ、つまり配列内のすべての項目を渡し、その項目をフィルタに含めるかどうかによってtrueまたはfalseを返す関数のみが必要です。

Array.prototype.indexOfを使用すると、文字列が配列内にあるかどうかを確認できます。

var allData = [{ 
 
    id: '10', 
 
    name: 'jhon' 
 
}, { 
 
    id: '11', 
 
    name: 'lewis' 
 
}, { 
 
    id: '12', 
 
    name: 'taylor' 
 
}, { 
 
    id: '13', 
 
    name: 'adam' 
 
}, { 
 
    id: '14', 
 
    name: 'bolive' 
 
}]; 
 

 
var addedIds = ['10', '12', '14']; 
 

 
var filteredData = allData.filter(function(item) { 
 
    return addedIds.indexOf(item.id) != -1; 
 
}); 
 

 
console.log(filteredData);

1

var allData = [{ 
 
    id: '10', 
 
    name: 'jhon' 
 
}, { 
 
    id: '11', 
 
    name: 'lewis' 
 
}, { 
 
    id: '12', 
 
    name: 'taylor' 
 
}, { 
 
    id: '13', 
 
    name: 'adam' 
 
}, { 
 
    id: '14', 
 
    name: 'bolive' 
 
}]; 
 

 
var addedIds = ['10', '12', '14']; 
 
var addedIdsSet = new Set(addedIds); 
 
var result = allData.filter(e => addedIdsSet.has(e.id)); 
 
console.log(result)

I個人設定へのIDの配列を回す等、及びMOVIそこからngの:

console.log(allData.filter(x => addedIdsSet.has(x.id))) 

注:お持ちの場合は設定を使用すると、必要なだけは本当にある

var addedIdsSet = new Set(addedIds); 

その後、残りの部分は、セットを使用して(あなたがしようとしたように)フィルタリングの問題ですO(n^2)からO(n)への複雑さを低下させるので、いくつかのパフォーマンスを絞りたいと思っています。nはallDataの要素の数です。 にもかかわらず、コードはきれいに見えるので、私はとにかくセットを使うのが好きです!

1
var allData = [ 
{ 
    id:'10', 
    name:'jhon' 
}, 
{ 
    id:'11', 
    name:'lewis' 
}, 
{ 
    id:'12', 
    name:'taylor' 
}, 
{ 
    id:'13', 
    name:'adam' 
}, 
{ 
    id:'14', 
    name:'bolive' 
} 
]; 

var addedIds = ['10', '12', '14']; 

var filteredValues = allData.filter(x => addedIds.indexOf(x.id) !== -1); 
console.log(filteredValues); 
0

あなたはこのようにそれを行うことができます。

var allData = [ 
 
    { 
 
     id:'10', 
 
     name:'jhon' 
 
    }, 
 
    { 
 
     id:'11', 
 
     name:'lewis' 
 
    }, 
 
    { 
 
     id:'12', 
 
     name:'taylor' 
 
    }, 
 
    { 
 
     id:'13', 
 
     name:'adam' 
 
    }, 
 
    { 
 
     id:'14', 
 
     name:'bolive' 
 
    } 
 
]; 
 

 
var addedIds = ['10', '12', '14']; 
 

 
var filtered_results = []; 
 

 
allData.filter(function (item) { 
 
    for(var k in addedIds){ 
 
     if(item.id === addedIds[k]){ 
 
      filtered_results.push(item); 
 
     } 
 
    } 
 
}); 
 
console.log(filtered_results);

関連する問題