JavaScript中是否有等效Python [x for x in array] 的列表推导式语法?
JavaScript 类似Python列表推导的实现方案
JavaScript 可以通过 Object.entries() + 数组实例方法组合实现和Python列表推导完全等价的效果,完全匹配你的开发需求。
适配你需求的直接实现
你需要遍历JSON对象的键值对、分别对键和值做转换的需求,对应你给出的伪代码可以直接用以下写法实现:
// 等价于你写的 [lambda function1(key), lambda function2(value) for key, value in json] const transformed = Object.entries(json).map(([key, value]) => [function1(key), function2(value)])
代码说明:
Object.entries(json)会将你的JSON对象转换为[[键1, 值1], [键2, 值2], ...]格式的二维数组,一次性获取所有键值对map方法会遍历每一组键值,对每个元素执行你定义的转换逻辑,返回的结果会直接组成新的数组- 如果你最终需要的是转换后的新对象而非二维数组,可以再配合
Object.fromEntries()实现:
const transformedObject = Object.fromEntries( Object.entries(json).map(([key, value]) => [function1(key), function2(value)]) )
其他常用列表推导等价写法
如果是处理普通数组的推导需求,也可以用数组方法组合实现:
- 等价于Python
[x*2 for x in array if x > 10]的筛选+转换写法:
const result = array.filter(x => x > 10).map(x => x * 2)
- 如果需要更灵活的处理逻辑,也可以用
flatMap实现,减少遍历次数:
const result = array.flatMap(x => x > 10 ? [x * 2] : [])
上述写法的可读性和执行效率在绝大多数业务场景下都完全够用,如果你处理的是十万级以上的超大JSON数据,原生for循环的性能会更好,除此之外更推荐上面的链式写法。
内容的提问来源于stack exchange,提问作者K. Zhu
相关产品推荐
相关产品推荐

