2017-01-18 4 views
0

私はJavascriptの初心者です。私は2つのJSON配列を持つJavascriptを使用してプロジェクトを作成しています:JSONオブジェクトの順序を変更してください。

var interfaces = [ 
       {id:'123123-12-31-23',mac:'234',flowid:'1',status:'deployed'}, 
       {id:'456456-12-31-23',mac:'45645',flowid:'2',status:'deployed'}, 
       {id:'123123-12-31-234',mac:'45',flowid:'3',status:'deployed'}, 
       {id:'456456-12-31-234',mac:'89',flowid:'4',status:'deployed'} 
      ]; 

    var reorderedInterfaces = [ 

       {id:'456456-12-31-23',mac:'45645',flowid:'2',status:'deployed'}, 
       {id:'456456-12-31-234',mac:'89',flowid:'4',status:'deployed'}, 
       {id:'123123-12-31-234',mac:'45',flowid:'3',status:'deployed'}, 
       {id:'123123-12-31-23',mac:'234',flowid:'1',status:'deployed'}, 
      ]; 

私は次の出力が必要です。ここで

var finalOutput = { 
    1:2, 
    2:4, 
    3:3, 
    4:1 
} 

は私のコードです:

var obj = {} 
    for(i=0; i<interfaces.length; i++){ 
     console.log() 
     for(j=0; j<reorderedInterfaces.length; j++){ 
      obj[interfaces[i].flowid] = reorderedInterfaces[j].flowid 
      break; 
     } 

    } 
    console.log(obj) 

これは私に間違った出力を提供します

+0

あなたのコードはどうなりますか?あなたの問題はどこですか? –

+1

これはJSONではありません。それらはJavascript配列です。 – lonesomeday

答えて

3

イテレータiとjが同じ値を持つ場合は、値を割り当てるだけで済みます。

if(i == j) 
{ 
    obj[interfaces[i].flowid] = reorderedInterfaces[j].flowid 
    break; 
} 

var interfaces = [{ 
 
    id: '123123-12-31-23', 
 
    mac: '234', 
 
    flowid: '1', 
 
    status: 'deployed' 
 
}, { 
 
    id: '456456-12-31-23', 
 
    mac: '45645', 
 
    flowid: '2', 
 
    status: 'deployed' 
 
}, { 
 
    id: '123123-12-31-234', 
 
    mac: '45', 
 
    flowid: '3', 
 
    status: 'deployed' 
 
}, { 
 
    id: '456456-12-31-234', 
 
    mac: '89', 
 
    flowid: '4', 
 
    status: 'deployed' 
 
}]; 
 

 
var reorderedInterfaces = [ 
 

 
    { 
 
    id: '456456-12-31-23', 
 
    mac: '45645', 
 
    flowid: '2', 
 
    status: 'deployed' 
 
    }, { 
 
    id: '456456-12-31-234', 
 
    mac: '89', 
 
    flowid: '4', 
 
    status: 'deployed' 
 
    }, { 
 
    id: '123123-12-31-234', 
 
    mac: '45', 
 
    flowid: '3', 
 
    status: 'deployed' 
 
    }, { 
 
    id: '123123-12-31-23', 
 
    mac: '234', 
 
    flowid: '1', 
 
    status: 'deployed' 
 
    }, 
 
]; 
 

 

 
var obj = {} 
 
for (i = 0; i < interfaces.length; i++) { 
 
    for (j = 0; j < reorderedInterfaces.length; j++) { 
 
    if(i == j) 
 
    { 
 
    obj[interfaces[i].flowid] = reorderedInterfaces[j].flowid 
 
    break; 
 
    } 
 
    } 
 

 
} 
 
console.log(obj)

1

あなただけの単一のループを必要とし、同じインデックスを取ります。

var interfaces = [{ id: '123123-12-31-23', mac: '234', flowid: '1', status: 'deployed' }, { id: '456456-12-31-23', mac: '45645', flowid: '2', status: 'deployed' }, { id: '123123-12-31-234', mac: '45', flowid: '3', status: 'deployed' }, { id: '456456-12-31-234', mac: '89', flowid: '4', status: 'deployed' }], 
 
    reorderedInterfaces = [{ id: '456456-12-31-23', mac: '45645', flowid: '2', status: 'deployed' }, { id: '456456-12-31-234', mac: '89', flowid: '4', status: 'deployed' }, { id: '123123-12-31-234', mac: '45', flowid: '3', status: 'deployed' }, { id: '123123-12-31-23', mac: '234', flowid: '1', status: 'deployed' }, ], 
 
    result = {}; 
 

 
interfaces.forEach(function (a, i) { 
 
    result[a.flowid] = reorderedInterfaces[i].flowid; 
 
}); 
 

 
console.log(result);

0

が期待される出力用

var obj = {} 
    for(i=0; i<interfaces.length; i++){ 
     for(j=0; j<reorderedInterfaces.length; j++){ 
      if(i==j){ 
       obj[interfaces[i].flowid] = reorderedInterfaces[j].flowid; 
      } 
     } 

    } 

var obj = {} 
    for(i=0; i<interfaces.length; i++){ 
     console.log() 
     for(j=0; j<reorderedInterfaces.length; j++){ 
      obj[interfaces[i].flowid] = reorderedInterfaces[j].flowid 
      break; 
     } 

    } 

からあなたのコードを変更します。 ほしいと思っています。

関連する問題