2016-10-28 14 views
-1

propsという配列があり、オブジェクトを持つ配列の数がnであり、すべての配列に異なる数のオブジェクトを含めることができます。
1)検索:私は2つの目標を持ってオブジェクトのn個の配列の間に相違点を見つける

... participation_enablednamepathing_enabledidこれらの特性は、同じプロパティIDの他の配列において異なる値を有することができる。

各オブジェクトは4つの特性を有しますオブジェクトの他の配列とは異なるすべてのオブジェクトプロパティをdiffsという別の配列に格納します。
2)他の配列(一意のid)には見つからない余分なオブジェクトをすべて見つけ、extraという別の配列に格納します。

私のコードが正常に差異を返しますが、それはすべての余分なオブジェクトを返しません...

例:

[ 
    [ 
    {participation_enabled:"false", name:"PropEins", pathing_enabled:"true", id:"prop1"}, 
    {participation_enabled:"false", name:"User Status", pathing_enabled:"false", id:"prop2"}, 
    {participation_enabled:"false", name:"Initial ID", pathing_enabled:"false", id:"prop3"}, 
    {participation_enabled:"false", name:"User ID", pathing_enabled:"false", id:"prop4"}, 
    {participation_enabled:"false", name:"Subdomain3", pathing_enabled:"false", id:"prop20"}, 
    {participation_enabled:"false", name:"Subdomain4", pathing_enabled:"false", id:"prop21"}, 
    {participation_enabled:"false", name:"Subdomain5", pathing_enabled:"false", id:"prop22"} 
    ], 
    [ 
    {participation_enabled:"false", name:"PropEins", pathing_enabled:"false", id:"prop1"}, 
    {participation_enabled:"false", name:"Room", pathing_enabled:"false", id:"prop2"}, 
    {participation_enabled:"false", name:"Subdomain", pathing_enabled:"false", id:"prop70"} 
    ], 
    [ 
    {participation_enabled:"true", name:"PropEins", pathing_enabled:"true", id:"prop1"}, 
    {participation_enabled:"true", name:"User Status", pathing_enabled:"true", id:"prop2"}, 
    {participation_enabled:"true", name:"Trackingcode", pathing_enabled:"true", id:"prop3"}, 
    {participation_enabled:"false", name:"User ID", pathing_enabled:"true", id:"prop4"}, 
    {participation_enabled:"false", name:"User ID2", pathing_enabled:"false", id:"prop50"} 
    ] 
] 

diffs配列が含まれている必要があります。この例:

[ 
    {id:"prop1", participation_enabled:["false","true"], pathing_enabled:["false","true"], index:0}, 
    {id:"prop2", participation_enabled:["false","true"], name:["User Status","Room"], participation_enabled:["false","true"], pathing_enabled:["false","true"], index:1}, 
    {id:"prop3", participation_enabled:["false","true"], name:["Initial ID","Trackingcode"], participation_enabled:["false","true"], pathing_enabled:["false","true"], index:2}, 
    {id:"prop4", pathing_enabled:["false","true"], index:3} 
] 

extraの配列は、

です。

これは私のコードです:

var diff = {}; 
    var extra = []; 
    props.forEach(function(val, i){ 
    if (i == 0) { 
     val.forEach(function(v1, ind){ 
     diff[v1.id] = {}; 
     diff[v1.id].index = [ind]; 
     for (var key in v1) { 
      diff[v1.id][key] = [v1[key]]; 
     } 
     }); 
    } 
    else { 
     val.forEach(function(v1){ 
     var id = v1.id; 
     for (var key in v1) { 
      if(diff[id]) { 
      diff[id][key].push(v1[key]); 
      } 
     } 
     if(!diff[id]) { 
      extra.push(v1); 
     } 
     }); 
    } 
    }); 

    for (var key in diff) { 
    var nested = diff[key]; 
    var index = nested.index.pop(); 
    for (nestedKey in nested) { 
     nested[nestedKey] = underscoreGS._filter(nested[nestedKey], function(item, pos) { 
     return nested[nestedKey].indexOf(item) == pos; 
     }); 

     if (nested[nestedKey].length < 2) {delete nested[nestedKey];} 

    } 
    diff[key].id = key; 
    diff[key].index = index 
    if (underscoreGS._keys(diff[key]).length < 3) {delete diff[key];} 
    } 

    diff = underscoreGS._values(diff); 
    return [diff, extra]; 
+0

のためにその負の投票とは何ですか? – Valip

答えて

0

これは私が実装され、機能するソリューションです:

var variable = [ 
 
    [ 
 
    {participation_enabled:"false", name:"PropEins", pathing_enabled:"true", id:"prop1"}, 
 
    {participation_enabled:"false", name:"User Status", pathing_enabled:"false", id:"prop2"}, 
 
    {participation_enabled:"false", name:"Initial ID", pathing_enabled:"false", id:"prop3"}, 
 
    {participation_enabled:"false", name:"User ID", pathing_enabled:"false", id:"prop4"}, 
 
    {participation_enabled:"false", name:"Subdomain3", pathing_enabled:"false", id:"prop20"}, 
 
    {participation_enabled:"false", name:"Subdomain4", pathing_enabled:"false", id:"prop21"}, 
 
    {participation_enabled:"false", name:"Subdomain5", pathing_enabled:"false", id:"prop22"} 
 
    ], 
 
    [ 
 
    {participation_enabled:"false", name:"PropEins", pathing_enabled:"false", id:"prop1"}, 
 
    {participation_enabled:"false", name:"Room", pathing_enabled:"false", id:"prop2"}, 
 
    {participation_enabled:"false", name:"Subdomain", pathing_enabled:"false", id:"prop70"} 
 
    ], 
 
    [ 
 
    {participation_enabled:"true", name:"PropEins", pathing_enabled:"true", id:"prop1"}, 
 
    {participation_enabled:"true", name:"User Status", pathing_enabled:"true", id:"prop2"}, 
 
    {participation_enabled:"true", name:"Trackingcode", pathing_enabled:"true", id:"prop3"}, 
 
    {participation_enabled:"false", name:"User ID", pathing_enabled:"true", id:"prop4"}, 
 
    {participation_enabled:"false", name:"User ID2", pathing_enabled:"false", id:"prop50"} 
 
    ] 
 
]; 
 
    var diff = {}; 
 
    var extra = []; 
 
    var ids = []; 
 
    var unique = []; 
 
    
 
    variable.forEach(function(val){ 
 
    val.forEach(function(v1) { 
 
     ids.push(v1.id); 
 
    }); 
 
    }) 
 
    ids.filter(function(a){ 
 
    if(ids.indexOf(a) == ids.lastIndexOf(a)) { 
 
     unique.push(a); 
 
    } 
 
    }); 
 
    variable.forEach(function(val){ 
 
    val.forEach(function(v1){ 
 
     if(unique.indexOf(v1.id) >= 0) { 
 
     
 
     extra.push(v1); 
 
     }  
 
    }); 
 
    }); 
 
    
 
    variable.forEach(function(val, i){ 
 
    if (i == 0) { 
 
     val.forEach(function(v1, ind){ 
 
     diff[v1.id] = {}; 
 
     diff[v1.id].index = [ind]; 
 
     for (var key in v1) { 
 
      diff[v1.id][key] = [v1[key]]; 
 
     } 
 
     }); 
 
    } 
 
    else { 
 
     val.forEach(function(v1){ 
 
     var id = v1.id; 
 
     for (var key in v1) { 
 
      if(diff[id]) { 
 
      diff[id][key].push(v1[key]); 
 
      } 
 
     } 
 
     }); 
 
    } 
 
    }); 
 
    
 
    for (var key in diff) { 
 
    var nested = diff[key]; 
 
    var index = nested.index.pop(); 
 
    for (nestedKey in nested) { 
 
     nested[nestedKey] = _.filter(nested[nestedKey], function(item, pos) { 
 
     return nested[nestedKey].indexOf(item) == pos; 
 
     }); 
 
     
 
     if (nested[nestedKey].length < 2) {delete nested[nestedKey];} 
 
     
 
    } 
 
    diff[key].id = key; 
 
    diff[key].index = index 
 
    if (_.keys(diff[key]).length < 3) {delete diff[key];} 
 
    } 
 
    
 
    diff = _.values(diff); 
 
    console.log("extra:", extra); 
 
    console.log("diff:", diff);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

関連する問題