对于nodejs / javascript有什么类似于pythons列表的理解吗?如果没有则可以创建具有类似行为的函数,例如
# Example 1
list_one = [[1, 2], [3, 4], [5, 6], [7, 8]]
someOfList = sum(x[1] for x in list_one)
print(someOfList) # prints 20
# Example 2
combined = "".join([str( ( int(x) + int(y) ) % 10) for x, y in zip("9999", "3333")])
print(combined) # prints 2222
等?或者你是否必须为每一种理解行为做出行为? 我知道你可以为每个人制作功能,但是如果你使用很多列表理解代码可以得到很长的时间
答案 0 :(得分:10)
将符号列入语言的语法通常用map
和filter
完成。
因此,考虑到Python列表理解,您还可以使用map和filter:
# Python - preferred way
squares_of_odds = [x * x for x in a if x % 2 == 1]
# Python - alternate way
map(lambda x: x * x, filter(lambda x: x % 2 == 1, a))
虽然理解在Python中是首选。 JavaScript有map
和filter
,因此您现在可以使用它们。
// JavaScript
a.map(function(x){return x*x}).filter(function(x){return x%2 == 1})
upcoming version of JavaScript will have array comprehensions in the language:
[ x*x for (x of a) if (x % 2 === 1) ]
要查看即将推出的版本中现有的内容,请参阅this compatibility table。在撰写本文时,您可以看到它们在Firefox中可用。
答案 1 :(得分:0)
这就是咖啡脚本被发明的原因,您可以通过复制和粘贴代码here来试一试(转到“尝试cofeescript”标签)
这就是它给我的原因:
var combined, list_one, someOfList, x, y;
list_one = [[1, 2], [3, 4], [5, 6], [7, 8]];
someOfList = sum((function() {
var _i, _len, _results;
_results = [];
for (_i = 0, _len = list_one.length; _i < _len; _i++) {
x = list_one[_i];
_results.push(x[1]);
}
return _results;
})());
print(someOfList);
combined = "".join([
(function() {
var _i, _len, _ref, _results;
_ref = zip("9999", "3333");
_results = [];
for (y = _i = 0, _len = _ref.length; _i < _len; y = ++_i) {
x = _ref[y];
_results.push(str((int(x) + int(y)) % 10));
}
return _results;
})()
]);