如何在对象上实现类似拼接的功能
How to accomplish splice-like functionality over objects?
我有以下对象:
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,
};
我希望能够:
- 获取该对象的第一个(假设为5个)属性
- 通过传递
start
偏移量获取该对象的N个属性
目前,我已经开发了隐式指定对象属性名称的解决方案,但我正在寻找更优雅的解决方案。
不能,因为对象不能保证其属性的顺序(直到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);
经过许多麻烦之后,我可以说这可以通过将对象转换为映射,然后应用切片来完成。我相信一旦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>");
那么你当然可以选择像一样扩展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>");
相关文章:
- 添加文字和评论功能更新Div
- JavaScript打印功能使日历停止工作
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 如何防止网页加载后自动启动功能
- 除修剪外的其他功能
- 悬停功能触发器
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 删除CKEditor工具栏按钮,但不删除功能
- 异步facebook功能
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- jQuery滚动功能只工作一次
- Graphiti中是否有任何工具提示功能
- React redux初始化功能,无论状态变化如何
- 在哪里可以学习ECMAScript标准中尚未包含的JavaScript功能
- 正在获取select上的功能id
- 如何在对象上实现类似拼接的功能
- 角度拖放:拼接不是三个级别的功能
- 角度拼接功能总是删除最后一个元素
- 拼接功能可以去除数组中6/7个条目
- 拼接功能在这里是如何工作的