使用自定义函数从字典中创建列表/数组
Create list/array from a dictionary using custom function
我有这样一个输入数组,数组的每个元素都是字典{x:a_int, y:a_int}
。现在我需要提取所有的y
值并创建一个新的数组,这样它就可以用来计算所有y
-值的最大值。这是我当前的代码:
var inputArray = [{x:1,y:100},{x:2,y:101},{x:3,y:103}];
function extractY(data) {
var result = [];
data.forEach(function (item) {
result.push(item.y);
});
return result;
}
// Test code
var yArray = extractY(inputArray);
console.log(Math.max.apply(Math, yArray));
我想缩短代码。由于我是javascript的新手,我想知道是否可以缩短函数extractY()
。我的想象是具有一种转换功能。代码不应依赖于jQuery
,也不必考虑旧浏览器的兼容性。
您可以简单地使用Array.prototype.map
,它将使用传递给它的函数返回的值创建一个新的数组,就像这个
function extractY(data) {
return data.map(function (item) {
return item.y;
});
}
或者你可以简单地写与相同的东西
console.log(Math.max.apply(Math, inputArray.map(function(item) {
return item.y;
})));
使用reduce
,您可以直接获得最大y值:
inputArray.reduce(function(prev, curr) {
return prev.y > curr.y ? prev : curr;
}).y
带下划线:
_.max(_.pick(inputArray, 'y'))
带d3:
d3.max(inputArray, function(d) { return d.y; })
回复@AmitJoki的评论:是的,我知道这个问题没有加下划线。如果你不想使用下划线,可以忽略这个答案。话虽如此,下划线是一个非常有用的实用工具带,非常适合解决此类问题以及其他许多问题。它经过了详尽的测试,稳健高效,能够正确处理所有边缘情况。与某些其他臃肿的库不同,它非常轻量级,非常值得学习。
我怀疑,暗示没有将问题标记为"下划线"意味着基于下划线的答案在某种程度上是不可接受的,这是否属于常识范畴,因为很容易想象,在许多情况下,OP甚至可能不知道这个选项,并可能欢迎关于如何编写更紧凑的代码的建议,同时在这个过程中学习一个有用的工具。
相关文章:
- 为对象数组创建列表项
- 如何在单击时创建列表
- 如何使用jquery创建列表
- 创建列表时,像在Ranker.com上一样创建多个项目
- 用于在Backbone中创建列表的Handlebars模板
- jQuery如何在页面重载时保留动态创建列表的选定选项
- 如何将动态创建的元素添加到我的动态创建列表中
- 如何使用 Javascript 和 jQuery 创建列表
- 如何从 JSON 数组创建列表
- 无法在 HTML 中创建列表
- 如何使用 AngularJS 创建列表视图
- 在 PHP 中的容器中创建列表
- 如何在文本区域中创建列表
- 在 JavaScript 中创建列表项
- 如何在 JavaScript 中创建列表参数来调用 WCF-Webservice
- 使用 Jscript 创建列表菜单运行时
- 从文本区域中的选定文本创建列表html
- 使用按钮创建列表
- 用于创建列表页列表项的谷歌应用程序脚本
- 从导入的JSON文件创建列表