Javascript Immutable.js中的深度查找

Javascript Immutable.js中的深度查找,javascript,immutable.js,Javascript,Immutable.js,我希望能够在Immutable.js中找到深度嵌套值的键路径。如何填写此函数deepFind以获得所需内容 const map = Immutable.fromJS({ a: { a1: 1, b1: 2 }, b: { b1: 3 b2: 4, b3: 5 } }); function deepFind(map, value) { /* ??? */ } deepFin

我希望能够在Immutable.js中找到深度嵌套值的键路径。如何填写此函数
deepFind
以获得所需内容

const map = Immutable.fromJS({
    a: { 
        a1: 1,
        b1: 2
    },
    b: {
        b1: 3
        b2: 4,
        b3: 5
    }
});

function deepFind(map, value) {
    /* ??? */
}

deepFind(map, 4); // returns ['b', 'b2']

看起来没有任何内置的方法可以做到这一点,所以我决定采用深度优先搜索。我使用
.toKeyedSeq()
搜索所有具有相同代码的集合类型

注意:如果集合包含它们自己,此函数将永远挂起

import Immutable from 'immutable';

function deepFind(root, value, path = Immutable.List()) {
  if (root === value) {
    return path;
  }

  if (!Immutable.isImmutable(root)) {
    // this is a leaf node, and it's not the value we want.
    return undefined;
  }

  for (const [key, child] of root.toKeyedSeq()) { 
    const result = deepFind(child, value, path.push(key));
    if (result) {
      return result;
    }
  }

  // no path is found
  return undefined;
}

运行map的键,检查每个键的值是否===值,如果是,则返回
[key,map[key]]
,否则检查
map[key]
是否为对象,如果是,则调用
deepFind(map[key],value)