如何在对象中嵌套对象?

时间:2019-09-23 14:52:37

标签: javascript reactjs

我有一个生成以下对象的函数:

const currentObject = {
  labels: {
    x1: "y1",
    x2: "y2",
    x3: "y3",
  }
}

要在我的api中处理它,其格式应为:

const targetObject = { 
    labels: {
        templatename:{
            x1: "y1",
            x2: "y2",
            x3: "y3",
        }
    }
}

const templatename = this.props.templatename;

如何在const中以模板名称嵌套对象?

我不想粘贴一堆代码,这两个对象只是一个示例,第一个对象可以通过以下函数生成:

state = {
        "labels": {

        }
    }

onChange = (e, key) => {
    this.setState({
        labels: {
            ...this.state.labels,
            [key]: e.target.value
        }
    });

4 个答案:

答案 0 :(得分:3)

您是说要使用动态键?您可以尝试:

<FlatList 
data={this.state.menu}
keyExtractor={elem => elem.name}
renderItem={elem => (<View><Text>{elem.item.name}</Text></View>)}
/>

const targetObject = {
  labels: {
    [this.props.templatename]: { ...currentObject.labels }
  }
};

答案 1 :(得分:1)

const updatedObj = {
  labels: {
   templatename: {
     ...currentObject.labels
   }
  } 
}

答案 2 :(得分:1)

您可以尝试使用此功能,它是可测试的,并且可以处理任何属性和模板名称。

const currentObject = {
    "labels": {
        "x1": "y1",
        "x2": "y2",
        "x3": "y3",
    }
}

function nestObjectByProperty(currentObj, propName, templateName){
  return {
    [propName]: {
      [templateName]: currentObj[propName]
    }
  }
}
const targetObj = nestObjectByProperty(currentObject, 'labels', 'templatename')

console.log(targetObj)

答案 3 :(得分:1)

您可以创建一个新对象并使用Object.assign

const currentObject = {
  "labels": {
    "x1": "y1",
    "x2": "y2",
    "x3": "y3",
  }
}

let newObj = Object.assign({}, {
  currentObject: {
    labels: {
      templatename: currentObject.labels
    }
  }
});

console.log(newObj)