2016-05-27 24 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

@HarisZ爲什麼不呢?什麼讓你困惑? –

+1

@HarisZ:你也可以使用'if(!(bp.cityid in cityMap))'或者'if(!cityMap [bp.cityid])'或者其他任何東西。 – Bergi

0

您可以使用arraycityIdmap[bp.cityid]代替object

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); 
}); 
相關問題