我有以下对象:
var data = {
'M.13-17': 0, 'M.18-24': 0, 'M.25-34': 0, 'M.35-44': 0, 'M.45-54': 0, 'M.55-64': 0, 'M.65+': 0,
'F.13-17': 0, 'F.18-24': 0, 'F.25-34': 0, 'F.35-44': 0, 'F.45-54': 0, 'F.55-64': 0, 'F.65+': 0,
};
我希望能够:
start
偏移量来获取该对象的N个属性。目前,我已经解决了隐含指定对象属性名称的解决方案,但我正在寻找更优雅的解决方案。
答案 0 :(得分:4)
您不能,因为对象不保证其属性的顺序(直到ES6中的某些情况)。
如果需要稳定索引,则应使用键值对数组:
var data = [{
key: 'M.13-17', value: 0
}, {
key: 'M.18-24', value: 0
}];
var firstFive = data.sort(function (it) { return it.key; }).splice(0, 5);
console.log(firstFive);
答案 1 :(得分:1)
很多麻烦之后我可以说可以将对象转换为地图然后应用切片。我相信一旦Object.entries()
在下一个ES版本中稳定下来,这项工作将会更容易处理,但截至目前你可以这样做......
var data = {'M.13-17': 0, 'M.18-24': 0, 'M.25-34': 0, 'M.35-44': 0, 'M.45-54': 0, 'M.55-64': 0, 'M.65+': 0, 'F.13-17': 0, 'F.18-24': 0, 'F.25-34': 0, 'F.35-44': 0, 'F.45-54': 0, 'F.55-64': 0, 'F.65+': 0},
mdata = Object.keys(data).reduce((m,k) => m.set(k, data[k]), new Map()), // convert object to map
adata = [...mdata].splice(0,5);
odata = adata.reduce((o,a) => {o[a[0]] = a[1]; return o} ,{})
document.write("<pre>" + JSON.stringify(odata,null,2) + "</pre>");
&#13;
当然,您可以选择延长Object.prototype
喜欢
var data = {'M.13-17': 0, 'M.18-24': 0, 'M.25-34': 0, 'M.35-44': 0, 'M.45-54': 0, 'M.55-64': 0, 'M.65+': 0, 'F.13-17': 0, 'F.18-24': 0, 'F.25-34': 0, 'F.35-44': 0, 'F.45-54': 0, 'F.55-64': 0, 'F.65+': 0};
Object.prototype.splice = function(s,e){
var ok = Object.keys(this);
return ok.reduce((a,k) => a.concat([[k, this[k]]]), []).splice(s, e = e || ok.length).reduce((o,a) => {o[a[0]]=a[1]; return o} ,{});
}
document.write("<pre>" + JSON.stringify(data.splice(0,5),null,2) + "</pre>");
&#13;