2016-06-14 14 views
-1

私は基本的にどのオブジェクトが2つの特定の値を持っているかを検索し、それにv_idの値をつけたいと思っている、各製品バリアントの設定を保持するオブジェクトを持っています。2つの値を含むオブジェクトの検索オブジェクトですか?

コード:product_1.variantsはバリアントオブジェクトへの参照である

//object 
product_1: { 
    p_id: 11, // Pendant Conicol 
    variants: { 
    v_1: { v_id:397, color:"gold", size:"20|30" }, 
    v_2: { v_id:396, color:"gold", size:"20|40" }, 
    v_3: { v_id:395, color:"gold", size:"20|50" }, 
    v_4: { v_id:394, color:"gold", size:"25|25" } 
    } 
} 

getVariantId: function() { 
    var results = []; // There will only be 1 result so maybe dont need array? 
    var searchFor = "gold and 20|50"; 
    //Loop here? 
    console.log(results.v_id); 
} 

答えて

0
var results = Object.keys(product_1.variants).map(function (key) { 
    return product_1.variants[key]; 
}).filter(function (object) { 
    return object.color === 'gold' && object.size === '20|50'; 
}); 

+0

は、どのように私は未定義の使用はconsole.log(results.v_id)を得続けるそのオブジェクトにv_idを返すことができます。 – Elevant

+0

結果は配列を返します... results [0] .v_id – sahbeewah

0
var product_1 = { 
     p_id: 11, // Pendant Conicol 
     variants: { 
     v_1: { v_id:397, color:"gold", size:"20|30" }, 
     v_2: { v_id:396, color:"gold", size:"20|40" }, 
     v_3: { v_id:395, color:"gold", size:"20|50" }, 
     v_4: { v_id:394, color:"gold", size:"25|25" } 
     } 
    } 

function search(obj,str){ 
    // remove space from str 
    str = str.replace(/\s/g,''); 

    var params = str.split('and'); 


    var res = []; 

for(item in obj){ 
    if(obj.hasOwnProperty(item) && obj[item].color == params[0] && obj[item].size == params[1] 
    ){ 
      res.push(obj[item]); 
    } 
} 

    // return the first item id or empty string if not found 
    // can do something like this :  
    return (res.length)?res[0].v_id:''; 
} 

console.log(search(product_1.variants,'gold and 25|25')); // output: 394 
0
function getVariantId(prodObj, searchFor) { 
    //i.e. var searchFor = "gold and 20|50" 
    var cond = searchFor.split(' and ') 
    for(key in prodObj.variants) { 
    if (prodObj.variants[key].color === cond[0] && prodObj.variants[key].size === cond[1]) return key 
    } 
}