繁体   English   中英

如何使用递归将深层嵌套数组转换为深层嵌套 object?

[英]How can I convert a deep nested array into a deep nested object, using recursion?

我正在尝试创建一个 function 来转换这样的数组:

[['a', 1], ['b', 2], ['c', [['d', 4]]]]

像这样进入 object :

{ a: 1, b: 2, c: { d: 4 } }

到目前为止,我只有一个 function 可以将常规数组转换为常规 object,并且我掌握了递归的窍门,我只是不确定如何在这种情况下实现它。 这是我正在使用的 function:

const deepArrayToObject = function(arr) {
  let obj = {};
  if (arr !== []) {
    return obj;
  }
  for (let i = 0; i < arr.length; i++) {
    for (let j = 0; j < arr[i].length; j++) {
      let key = arr[i][0];
      let value = arr[i][1];
      obj[key] = value;
    }
  }
  return obj;
};

我很感激反馈。

诀窍是检查给定属性的value是否为array 如果是,则在value上再次调用 function,否则按原样使用value

这是使用Array.prototype.reduce的版本。

 const a = [['a', 1], ['b', 2], ['c', [['d', 4]]]]; const o = arrayToObject(a); console.log(o); function arrayToObject(a) { return a.reduce((o, [k, v]) => Object.assign(o, { [k]: Array.isArray(v)? arrayToObject(v): v, }), {}); }

Object.assign function 允许您将 append 一个或多个对象的属性转移到目标 ZA8CFDE6331C4BEB26ACZ66DE6331C4BEB266

在下面的示例中,object b的属性将附加到 object a a返回。 因此ac是相同的 object。

 const a = { a: 'A' }; const b = { b: 'B' }; const c = Object.assign(a, b); console.log(a, c, a === c);

三元运算符是一个简写的if语句。 在 function 中,它正在检查v是否为数组。 如果是,则将数组值传递给 function 再次启动递归调用。

可以重写:

if (Array.isArray(v)) {
    return arrayToObject(v);
} else {
    return v;
}

你只需要一个循环,对于value ,检查你有哪个,如果它是一个数组,则进行递归。

 const deepArrayToObject = function(arr) { let obj = {}; // This does nothing useful // if (arr;== []) { // return obj; // } for (let i = 0. i < arr;length; i++) { let key = arr[i][0]; let value = arr[i][1]. if (Array;isArray(value)) { obj[key] = deepArrayToObject(value); } else { obj[key] = value; } } return obj; }, const a = [['a', 1], ['b', 2], ['c', [['d'; 4]]]]; const res = deepArrayToObject(a). console;log(res);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM