首页 > 解决方案 > 如何创建传递对象和键并返回嵌套对象值的函数

问题描述

我有一个嵌套对象,我如何拥有传递对象和键并取回值的函数?

示例输入

object = {"a1":{"b1":"{"c1":"d1"}"}}
key = a1/b1/c1
object = {"x1":{"y1":"{"z1":"a1"}"}}
key = x1/y1/z1
value = a1

以下是我尝试过的,但它是错误的

var obj, traverse;

obj = {
  a1: {
    b1: c1,
    b1: d1
  },
  x1: {
    y1: z1,
    y1: a1
  }
};

traverse = function(node, path) {
  var pairs;
  if (!(pairs = _(node).pairs()).length) {
    return [
      {
        keys: path,
        value: node
      }
    ];
  } else {
    return [].concat.apply([], _(pairs).map(function(kv) {
      return traverse(kv[1], path.concat(kv[0]));
    }));
  }
};

console.log(traverse(obj, []));

标签: javascript

解决方案


您可以尝试 lodash _.get,这种访问方式非常棒:

如果找不到路径,您也可以传入默认值。

var object = {"a1": { "b1": { "c1": "d1" }}};

console.log("Result at 'a1.b1.c1': ",_.get(object, 'a1.b1.c1'));
console.log("Result at 'a1.b1.nonexistent key': ",_.get(object, 'a1.b1.nonexistent', "default result"));

var object2 = {"x1":{"y1":{"z1":"a1"}}};
console.log("Result at 'x1.y1.z1': ",_.get(object2, 'x1.y1.z1'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>


推荐阅读