2017-01-13 10 views
0

私はオブジェクトの配列を持っています。私はオブジェクトをベースに配列をフィルタリングしたい、条件があります。javascriptに複数の配列を持つ別のオブジェクトのフィルタリングに基づくフィルタ配列

私の配列は以下の通りである:

var data = [ 
{ 
    "name": "nitin", 
    "r_id": "1", 
    "t_id": "4" 
}, 
{ 
"name": "test", 
    "r_id": "2", 
    "t_id": "3" 
}, 
{ 
    "name": "test1", 
    "r_id": "2", 
    "t_id": "4" 
}, 
{ 
    "name": "test3", 
    "r_id": "3", 
    "t_id": "3" 
}, 
{ 
    "name": "test2", 
    "r_id": "1", 
    "t_id": "1" 
}] 

と、次のように私のオブジェクトは次のとおりです。

R_IDはロールIDとt_idはid型

あるので、私はしたいです

var obj = { 
role:['1','2'], 
type:['1','3'] 
} 

役割IDが1または2のAND型IDの結果は1または3です。

したがって数学的にrole_id & & TYPE_ID((1 || 2)& &(1 || 3))私の出力が好きなはずです

var result = [ 
{ 
    'name':'test', 
    'r_id':2, 
    't_id':3, 
}, 
{ 
    'name':'test2', 
    'r_id':1, 
    't_id':1, 
}]; 
+1

あなたが何かをしようとしているのですか? –

+0

値が配列内にあるかどうかをどうやって確認しますか?どのようにフィルタを使用しますか?あなたが答えに近づくようなそれらと音に答える。 – epascarello

+0

ya私は最初にオブジェクトを取ってから、各配列のforeachを行った後に、自分のユーザー配列のforeachを行いましたが、出力を得られませんでした。結果を得るために混乱します。 – Nitin

答えて

1

var data = [ 
 
{ 
 
    "name": "nitin", 
 
    "r_id": "1", 
 
    "t_id": "4" 
 
}, 
 
{ 
 
"name": "test", 
 
    "r_id": "2", 
 
    "t_id": "3" 
 
}, 
 
{ 
 
    "name": "test1", 
 
    "r_id": "2", 
 
    "t_id": "4" 
 
}, 
 
{ 
 
    "name": "test3", 
 
    "r_id": "3", 
 
    "t_id": "3" 
 
}, 
 
{ 
 
    "name": "test2", 
 
    "r_id": "1", 
 
    "t_id": "1" 
 
}] 
 

 
var obj = { 
 
role:['1','2'], 
 
type:['1','3'] 
 
} 
 

 
let result = data.filter(item=>{ 
 
\t return obj.role.indexOf(item.r_id) > -1 && obj.type.indexOf(item.t_id) > -1 
 
}) 
 

 
console.log(result)

+0

あなたのお答えはすべて私の仕事です。 – Nitin

+0

@ニチン、あなたは受け入れられた答えをマークする必要があります –

0

をあなたは自分を反復処理する必要がありますdataと入力し、objにキー(r_idt_id)が存在するかどうかを確認しますive配列)。このためには、Array#filterを使用し、あなたが持っているデータ内の対応するプロパティ名、用objビットを、変更される可能性がArray.filter

var data = [{"name":"nitin","r_id":"1","t_id":"4"},{"name":"test","r_id":"2","t_id":"3"},{"name":"test1","r_id":"2","t_id":"4"},{"name":"test3","r_id":"3","t_id":"3"},{"name":"test2","r_id":"1","t_id":"1"}] 
 

 
var obj = { 
 
    role:['1','2'], 
 
    type:['1','3'] 
 
} 
 

 
var result = data.filter(function(element){ 
 
    return obj.role.indexOf(element.r_id) !== -1 && // element has valid role 
 
      obj.type.indexOf(element.t_id) !== -1 // element has valid type 
 
}) 
 

 
console.log(result)

0

var data = [ 
 
{ 
 
    "name": "nitin", 
 
    "r_id": "1", 
 
    "t_id": "4" 
 
}, 
 
{ 
 
"name": "test", 
 
    "r_id": "2", 
 
    "t_id": "3" 
 
}, 
 
{ 
 
    "name": "test1", 
 
    "r_id": "2", 
 
    "t_id": "4" 
 
}, 
 
{ 
 
    "name": "test3", 
 
    "r_id": "3", 
 
    "t_id": "3" 
 
}, 
 
{ 
 
    "name": "test2", 
 
    "r_id": "1", 
 
    "t_id": "1" 
 
}] 
 

 
var obj = { 
 
role:['1','2'], 
 
type:['1','3'] 
 
} 
 

 
var filterItems = data.filter(function(o){ 
 
    return obj.role.indexOf(o.r_id) != -1 && obj.type.indexOf(o.t_id) != -1; }); 
 

 
console.log(filterItems);

+0

おかげであなたのすべての答えは私の仕事です – Nitin

0

を使用することができますし、ご希望の商品についてはArray#everyでご確認ください。

var data = [{ name: "nitin", r_id: "1", t_id: "4" }, { name: "test", r_id: "2", t_id: "3" }, { name: "test1", r_id: "2", t_id: "4" }, { name: "test3", r_id: "3", t_id: "3" }, { name: "test2", r_id: "1", t_id: "1" }], 
 
    obj = { r_id: ['1', '2'], t_id: ['1', '3'] }, 
 
    keys = Object.keys(obj), 
 
    result = data.filter(function (o) { 
 
     return keys.every(function (k) { 
 
      return obj[k].indexOf(o[k]) !== -1; 
 
     }); 
 
    }); 
 

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

+0

あなたのすべての答えは私の仕事です – Nitin

関連する問題