2016-05-27 8 views
0

Object.keysを使用して、オブジェクトの配列にキー割り当てを行います。しかし、それは反復ごとに一意のオブジェクトを返したので、私の4つのアイテムは2になりました。それを回避する方法はありますか?オブジェクト配列のObject.keysを使用

var cityIdmap = {}; 
 
var bpidmap = { 
 
    '7': { 
 
    cityid: 2, 
 
    bpid: 7, 
 
    name: 'Puduraya', 
 
    time: '+00:00', 
 
    sbpid: 50169 
 
    }, 
 
    '11': { 
 
    cityid: 1, 
 
    bpid: 11, 
 
    name: 'Golden Mile Tower', 
 
    time: '+00:00', 
 
    sbpid: 50172 
 
    }, 
 
    '12': { 
 
    cityid: 2, 
 
    bpid: 12, 
 
    name: 'Berjaya Times Square', 
 
    time: '+00:00', 
 
    sbpid: 50171 
 
    }, 
 
    '66': { 
 
    cityid: 1, 
 
    bpid: 66, 
 
    name: 'Textile Centre', 
 
    time: '+00:00', 
 
    sbpid: 50170 
 
    } 
 
}; 
 

 
Object.keys(bpidmap).forEach(function(item) { 
 
    var bp = bpidmap[item]; 
 
    cityIdmap[bp.cityid] = {}; 
 
    cityIdmap[bp.cityid][bp.bpid] = bp; 
 
}); 
 

 
document.write(JSON.stringify(cityIdmap));

答えて

0

は、オブジェクトがすでに初期化されていることをcheckを追加します。

Object.keys(bpidmap).forEach(function(item) { 
    var bp = bpidmap[item]; 
    if (typeof cityIdmap[bp.cityid] === 'undefined') cityIdmap[bp.cityid] = {}; 
    cityIdmap[bp.cityid][bp.bpid] = bp; 
}); 
+0

滑らかなソリューションを使用することができます!ここでtypeofを使用する必要がありますか? –

+0

@ハリスZなぜか?あなたを混乱させているのは何ですか? –

+1

@HarisZ:あなたは 'if(!(cityMapのbp.cityid))'や 'if(!cityMap [bp.cityid])'やそれ以外のものを使うこともできます。 – Bergi

0

あなたはarrayobject代わりcityIdmap[bp.cityid]

var cityIdmap = {}; 
var bpidmap = { 
    '7': { 
    cityid: 2, 
    bpid: 7, 
    name: 'Puduraya', 
    time: '+00:00', 
    sbpid: 50169 
    }, 
    '11': { 
    cityid: 1, 
    bpid: 11, 
    name: 'Golden Mile Tower', 
    time: '+00:00', 
    sbpid: 50172 
    }, 
    '12': { 
    cityid: 2, 
    bpid: 12, 
    name: 'Berjaya Times Square', 
    time: '+00:00', 
    sbpid: 50171 
    }, 
    '66': { 
    cityid: 1, 
    bpid: 66, 
    name: 'Textile Centre', 
    time: '+00:00', 
    sbpid: 50170 
    } 
}; 

Object.keys(bpidmap).forEach(function(item) { 
    var bp = bpidmap[item]; 
    cityIdmap[bp.cityid] = cityIdmap[bp.cityid] || []; //use array instead of object 
    var temp = {}; 
    temp[bp.bpid] = bp; 
    cityIdmap[bp.cityid].push(temp); 
}); 
関連する問題