JavaScript使用嵌套数组/对象作为另一个对象的属性分配数组

时间:2018-04-13 08:09:57

标签: javascript

我有一个包含嵌套数组的对象的数组,如下所示:

var category_tree = [
    {
        category_id: 1,
        name: "A",
        children: [
            {
                category_id: 2,
                name:" B, child of A",
                children: [
                    {
                        category_id: 3,
                        name: "C, child of B",
                    }
                ]
            }

        ]
    }
]

我想采取另一个看起来像这样的对象:

{ 
    categories: []
    isFetching: false, 
    isValid: false, 
    currentFilter: "NAME_ASCENDING", 
    displayError: false, 
    errorMessage: ""
}

并将categories属性设置为等于此category_tree对象。

不幸的是,无论我尝试什么,我都会失去孩子们关键时刻的一切:

{ 
    categories: [{
        category_id: 1,
        name: "A",
        children: []
    }],
    isFetching: false, 
    isValid: false, 
    currentFilter: "NAME_ASCENDING", 
    displayError: false, 
    errorMessage: ""
}

这就是我的问题:如何将嵌套数组/对象指定为对象的属性?

编辑:我尝试了什么:

let newState = Object.assign({}, state, {                                                 
        isFetching: false,                                                                    
        valid: true,   
        categories: category_tree                                                   
    })

let newState = Object.assign({}, state, {
    isFetching: false,
    valid: true
})
newState.categories = category_tree

期望的结果:

{ 
    categories: [
        {
            category_id: 1,
            name: "A",
            children: [
                {
                    category_id: 2,
                    name:" B, child of A",
                    children: [
                        {
                            category_id: 3,
                            name: "C, child of B",
                        }
                    ]
                }

            ]
        }
    ],
    isFetching: false, 
    isValid: false, 
    currentFilter: "NAME_ASCENDING", 
    displayError: false, 
    errorMessage: ""
}

1 个答案:

答案 0 :(得分:1)

我已取消删除,表明切片似乎做了你想做的事情

newCat.categories = category_tree.slice(0);

喜欢这个

var category_tree = [{
  category_id: 1,
  name: "A",
  children: [{
      category_id: 2, // added a comma
      name: " B, child of A",
      children: [{
        category_id: 3,
        name: "C, child of B",
      }]
    }

  ]
}]

var newCat = {
  categories: [], // added a comma
  isFetching: false,
  isValid: false,
  currentFilter: "NAME_ASCENDING",
  displayError: false,
  errorMessage: ""
}

newCat.categories = category_tree.slice(0)

console.log(JSON.stringify(newCat,null, 2));