Javascript 使用下划线映射获取对象的前N个属性
我有一个对象,希望使用下划线映射/每个对象获取前n个项目 代码如下:Javascript 使用下划线映射获取对象的前N个属性,javascript,list,loops,underscore.js,Javascript,List,Loops,Underscore.js,我有一个对象,希望使用下划线映射/每个对象获取前n个项目 代码如下: var input = { a:1, b:2, c:3, d:4 } _.map(input, function (value, key, index) { if(index < 2) { console.log(key + ' == ' + value) } }); 输出应该类似于[{a:1},{b:2}…]纯ES6解决方案,没有下划线/Lodash: const cutObject
var input = {
a:1,
b:2,
c:3,
d:4
}
_.map(input, function (value, key, index) {
if(index < 2) {
console.log(key + ' == ' + value)
}
});
输出应该类似于[{a:1},{b:2}…]纯ES6解决方案,没有下划线/Lodash:
const cutObject = (obj, max) => Object.keys(obj)
.filter((key, index) => index < max)
.map(key => ({[key]: obj[key]}));
console.log(cutObject({a:1, b:2, c:3, d:4, e:5}, 3)); // [{a:1}, {b:2}, {c:3}]
但是您也应该知道Object.keys不能保证特定的顺序。它按属性原始插入到对象中的顺序返回对象的键数组。最后一个可能取决于JavaScript引擎实现,因此如果顺序非常重要,则最好使用数组。您可以使用和获取前2个键的名称,然后使用获取这些键:
let result = _.pick(input, _.first(_.keys(input), 2 ))
实际上,我想要类似[{a:1},{b:2}…]的东西,它返回一个对象的键数组,按照最初将属性插入到该对象的顺序,但不是真的:object.keys{foo:'bar',42:21}。@FelixKling是的,需要澄清。Per:Object.keys方法返回给定对象自身可枚举属性的数组,其顺序与for…in循环提供的顺序相同。Per:for…in语句按原始插入顺序迭代对象的可枚举属性。42有点不对劲。例如,如果我手动添加aFoo属性,那么它将是最后一个。for…in在属性上迭代的顺序实际上取决于实现。然而,许多实现浏览器尤其会先按升序遍历数值属性,然后按插入顺序遍历非数值属性。谢谢!我在答案中添加了一个额外的警告。对象中的属性没有顺序。所以谈论前n个属性没有多大意义。虽然可以从对象中获取n个属性,但不能保证按照定义的顺序获取它们。