Python列表理解nodejs / javascript

时间:2014-01-27 03:24:26

标签: javascript python node.js

对于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

等?或者你是否必须为每一种理解行为做出行为? 我知道你可以为每个人制作功能,但是如果你使用很多列表理解代码可以得到很长的时间

2 个答案:

答案 0 :(得分:10)

将符号列入语言的语法通常用mapfilter完成。

因此,考虑到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有mapfilter,因此您现在可以使用它们。

// 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;
  })()
]);