javascript - 将给定结构二维数组转换为嵌套对象数组

标签 javascript arrays nested-object

我有一个已排序的二维数组作为输入。我需要获得一个结构相同的嵌套对象数组,如下所示。如何获得预期的输出?

input = [
["1", "2", "3", "4", "5", "6", "7", "8"],
["1", "2", "3", "4", "5", "6", "7", "9"],
["cat", "accessories", "clothes"],
["cat", "food", "dry"],
["cat", "food", "wet"],
["dog", "drinks"],
["dog", "food"]];

这是我尝试过的:

var output = [];    
input.forEach((v, i) => {    
if (i !== 0){
    var temp_obj = {};

    for(let j=0; j<v.length; j++){
        if (input[i-1][j] === v[j]){
            temp_obj[input[i-1][j]] = [];
        }else if (!_.isEmpty(temp_obj) && typeof(input[i-1][j]) !== 'undefined'){
            console.log('this is it ', temp_obj)
        }
    }
    if (!_.isEmpty(temp_obj)){
        output.push(temp_obj);
    }
}
})

console.log(output)    

预期输出

   output = [{
        "1": [{
            "2": [{
                "3": [{
                    "4": [{
                        "5": [{
                            "6": [{
                                "7": [{
                                    "8": []
                                }, {
                                    "9": []
                                }]
                            }]
                        }]
                    }]
                }]
            }]
        }]
    },
    {
        "cat": [{
            "accessories": [{
                "clothes": []
            }]
        }, {
            "food": [{
                "dry": []
            }, {
                "wet": []
            }]
        }]
    },
    {
        "dog": [{
            "food": []
        }, {
            "drinks": []
        }]
    }
]

最佳答案

减少是你的 friend

input = [
  ["1", "2", "3", "4", "5", "6", "7", "8"],
  ["1", "2", "3", "4", "5", "6", "7", "9"],
  ["cat", "accessories", "clothes"],
  ["cat", "food", "dry"],
  ["cat", "food", "wet"],
  ["dog", "drinks"],
  ["dog", "food"]
];

const structure = input.reduce((obj, arr) => {
  const last = arr.pop()
  const chain = arr.reduce((o, key) => {
    o[key] = o[key] || {}
    return o[key]
  }, obj)
  chain[last] = []
  return obj
}, {})

//console.log(structure)
var finalArray = Object.entries(structure).map(
  ([k,v]) => ({[k]:v})
)
console.log(finalArray)

关于javascript - 将给定结构二维数组转换为嵌套对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57806509/

相关文章:

javascript - ng-repeat 内计数不增加

javascript - 如何计算谷歌地图中的其他2个坐标与方位 Angular 和距离

javascript - 验证 Javascript 中的多个部分

javascript - 为什么我的对象没有在 JavaScript 中以编程方式正确添加到选择元素?

javascript - JS sort() 在嵌套对象上无法按预期工作

javascript - 定位 selenium 中只有 href 的元素

javascript - 循环遍历字符串数组 - 停留在最后一个字符串

java - 打印流数组

c 中的条件不满足

javascript - 检查嵌套对象是否包含特定键,然后替换父对象的键