【发布时间】:2014-10-09 15:09:50
【问题描述】:
Underscore.js 有一个非常有用的map 函数。
_.map([1, 2, 3], function(num){ return num * 3; });
=> [3, 6, 9]
_.map({one: 1, two: 2, three: 3}, function(num, key){ return num * 3; });
=> [3, 6, 9]
我正在寻找可以迭代嵌套对象或深度映射的类似函数。经过大量搜索,我真的找不到这个。我能找到的是pluck一个深层对象的东西,但不是遍历一个深层对象的每个值。
类似这样的:
deepMap({
one: 1,
two: [
{ foo: 'bar' },
{ foos: ['b', 'a', 'r', 's'] },
],
three: [1, 2, 3]
}, function(val, key) {
return (String(val).indexOf('b') > -1) ? 'bobcat' : val;
})
如何做到这一点?
样本输出
{
one: 1,
two: [
{ foo: 'bobcat' },
{ foos: ['bobcat', 'a', 'r', 's'] },
],
three: [1, 2, 3]
}
【问题讨论】:
-
你考虑过jsonpath吗?
-
可能会,但这是一个完整的库。我宁愿寻找一个 10-ish 线算法,那会简单得多。
-
你的例子的输出是什么?它是否需要严格处理 JSON 数据? (即没有函数或
Dates) -
是的 - 让我们保持简单,只说
objects和arrays、strings和integers。 -
这是否会用
[1, 2, 3]然后1、2、3调用您的迭代器函数。还是只为非对象调用迭代器?
标签: javascript json dictionary