[英]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
返回。 因此a
和c
是相同的 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.