我需要创建具有排序 keys
的对象的蜡烛值:
var obj = [{1: 'a'}, {2:'b'}, {3:'c'}, {4:'d'}, {5:'e'},{6: 'a'}, {7:'b'},{8:'c'}, {9:'d'}, {10:'e'}]
根据键过滤此对象的最有效方法是什么?
例如,我想要:用2 < keys <5
或6 < keys < 9
过滤的obj
(实际上,键是时间戳,值是价格数据)
编辑: 这是对象。这就是我所说的排序
var obj = [{1: 'a'}, {2:'b'}, {3:'c'}, {4:'d'}, {5:'e'},{6: 'a'}, {7:'b'},{8:'c'}, {9:'d'}, {10:'e'}]
答案 0 :(得分:3)
您可以使用Object.keys来获取密钥,并使用满足条件的kv对来简化创建新对象
var obj = {1: 'a', 2:'b', 3:'c', 4:'d', 5:'e',6: 'a', 7:'b',8:'c', 9:'d', 10:'e'}
var res = Object.keys(obj).reduce((acc, elem) => {
if (elem > 2 && elem < 5) acc[elem] = obj[elem]
return acc
}, {})
console.log(res)
看起来obj已更改
您可以通过简单的.filter()
var res = obj.filter(elem => Object.keys(elem)[0] > 2 && Object.keys(elem)[0] < 5)
如果您决定在评论中使用该结构
var obj = [{time: 1, value: 'a'},{time: 2, value: 'b'},{time: 3, value: 'c'},{time: 4, value: 'd'}]
var res = obj.filter(elem => elem.time > 2 && elem.time < 5)
答案 1 :(得分:0)
简单的Objet.keys和reduce用一组有限的键创建新的对象。
var obj = {1: 'a', 2:'b', 3:'c', 4:'d', 5:'e',6: 'a', 7:'b',8:'c', 9:'d', 10:'e'}
var filtered = Object.keys(obj).reduce((o, k) => {
const num = Number(k)
if (num > 4 && num < 9) {
o[k] = obj[k]
}
return o
}, {})
console.log(filtered)
仅警告对象键可能不按数字顺序。因此,当您输出它们时,not guaranteed中的5将在6之前。
答案 2 :(得分:0)
如果您正在使用lodash,它就很简单,如下所示:
const _ = require('lodash');
var obj = {1: 'a', 2:'b', 3:'c', 4:'d', 5:'e',6: 'a', 7:'b',8:'c', 9:'d', 10:'e'};
filtered = _.pickBy(obj,(val,key) =>{return ((key > 2) && (key < 5))})
答案 3 :(得分:0)
您需要的是先对键进行排序,然后使用过滤器和排序后的值创建新对象
我将其更改为Map,因为不能保证对对象键进行排序
const obj = {1: 'a', 2:'b', 4:'c', 3:'d', 5:'e',6: 'a', 7:'b',8:'c', 9:'d', 10:'e'};
const newObj = new Map();
Object.keys(obj).filter(key =>{
return (key > 2 && key < 5)
}).sort().forEach(key=>{
newObj.set(key,obj[key])
})
答案 4 :(得分:0)
如我所见,您有一个数组而不是对象。使用filter
和Object.keys
以及类似((2<key && key<5) || (6<key && key< 9))
var arr = [{1: 'a'}, {2:'b'}, {3:'c'}, {4:'d'}, {5:'e'},{6: 'a'}, {7:'b'},{8:'c'}, {9:'d'}, {10:'e'}]
var newArr = arr.filter((o=>{
let k = Object.keys(o);
if((2<k[0] && k[0]<5) || (6<k[0] && k[0]< 9)){
return true;
}
}))
console.log(newArr)
答案 5 :(得分:-1)
像这样吗?
keys()
将为您提供对象键数组,您可以对其进行过滤
var obj = {1: 'a', 2:'b', 3:'c', 4:'d', 5:'e',6: 'a', 7:'b',8:'c', 9:'d', 10:'e'};
keys(obj).filter((a)=> parseInt(a) > 2 && parseInt(a) <5 );