[英]Dynamically create nested javascript objects with the same key but different values from an array
需要帮助解决这个问题.. 我想动态创建嵌套的 Javascript 对象..
我有一个键,它有多个值,需要将每个值嵌套在数组中。 例如:
{
"name": [{
"desc": "A",
"age": 26,
"name": [{
"desc": "B",
"age": 12,
"name": [{
"desc": "C",
"age": 48
}]
}]
}]
}
到目前为止,我有这个:
var data = [[{desc:"A", age:26}], [{desc:"B", age:12}], [{desc:"C", age:48}]] const name = "name" var json = {}; var current = json; for (var i = 0; i < data.length; i++) { current[name] = data[i]; current = current[name]; } console.log(JSON.stringify(json));
它只返回数据数组中的第一项。
{
"name": [{
"desc": "A",
"age": 26
}]
}
下面的代码做你想要的:
var data = [[{desc:"A", age:26}], [{desc:"B", age:12}], [{desc:"C", age:48}]] const value = data.reverse().reduce((acc, item) => { return [{ ...item[0], name: acc }] }); console.log(value);
虽然如果你只有一个对象数组而不是包含对象的数组数组,这会稍微容易一些:
var data = [{desc:"A", age:26}, {desc:"B", age:12}, {desc:"C", age:48}]
data.reverse().reduce((acc, item) => {
return [{
...item,
name: acc
}]
});
在这种情况下您需要使用递归,因为您正在创建孩子。
在这段代码中,我们通过删除第一个元素并将其传回同一个函数来减小数组的大小
var data = [ [{desc:"A", age:26}], [{desc:"B", age:12}], [{desc:"C", age:48}] ] function recursivelyAssignData(array) { // we get the current element, to assign it a property "name", const currentElement = array[0][0] // we remove the first element, so it wont be pass to subsequent call of the function. array.shift(); // if this is the last element, we don't want to assign the property "name" to it. return array.length >= 1 ? Object.assign(currentElement, { // we assign the value of same function, but with a different array. name: recursivelyAssignData(array), }) : currentElement; } const result = {request: recursivelyAssignData(data)}; console.log('results:', result , 'json:', JSON.stringify(result ));
聚苯乙烯
递归可能不是世界上最直观的东西,如果你理解起来有困难,请提出问题。
你快到了。 由于这些值是作为数组中的第一项插入的,因此请使用索引0
来访问它们。
const data = [[{desc:"A", age:26}], [{desc:"B", age:12}], [{desc:"C", age:48}]]; const name = "name"; let result = { [name]: data[0] }; let obj = result; for (let i = 1; i < data.length; i++) { let current = obj[name][0]; current[name] = data[i]; obj = current; } console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.