Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用下划线映射获取对象的前N个属性_Javascript_List_Loops_Underscore.js - Fatal编程技术网

Javascript 使用下划线映射获取对象的前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

我有一个对象,希望使用下划线映射/每个对象获取前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 = (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个属性,但不能保证按照定义的顺序获取它们。