如果我的state
对象是这样,
this.state={
input:{
employee_count_range: {
value: props.employee_count_range || '',
errMsg: null
},
phone: {
value: '',
errMsg: null
},
city: {
value: '',
errMsg: null
}
}
}
和user
对象就是这样,
let user = {
employee_count_range: '',
phone: '',
city: ''
}
ES6是否可以通过循环进行任何操作?
Object.keys(this.state.inputs)
.map(field => user[field] = this.state.input[field].value);
我想将state
中的每个value
对象分配给user
对象值
答案 0 :(得分:3)
在回答我的问题“重要的是,您要动态地发现this.state.inputs中属性的名称,还是可以按字面意义列出它们?” ,{{3 }}:
可以按字面意思列出它们。我知道我可以循环执行。我只想知道是否有可能。
当然,根本不需要循环,直接分配是一种简单直接的方法:
user.employee_count_range = this.state.inputs.employee_count_range.value;
user.phone = this.state.inputs.phone.value;
user.city = this.state.inputs.city.value;
实时示例(使用state
而非this.state
):
const state = {
inputs: {
employee_count_range: {
value: 42
},
phone: {
value: "123 456 7890"
},
city: {
value: "London"
}
}
};
const user = {};
user.employee_count_range = state.inputs.employee_count_range.value;
user.phone = state.inputs.phone.value;
user.city = state.inputs.city.value;
console.log(user);
您也可以使用解构分配来做到这一点,但是它并不能为您带来任何好处,而且阅读起来很棘手:
({
employee_count_range: {value: user.employee_count_range},
phone: {value: user.phone},
city: {value: user.city}
} = this.state.inputs);
实时示例(使用state
而非this.state
):
const state = {
inputs: {
employee_count_range: {
value: 42
},
phone: {
value: "123 456 7890"
},
city: {
value: "London"
}
}
};
const user = {};
({
employee_count_range: {value: user.employee_count_range},
phone: {value: user.phone},
city: {value: user.city}
} = state.inputs);
console.log(user);
以下所有内容均假定您要动态查找属性名称,现在事实并非如此。
如果您想复制此内容:
Object.keys(this.state.inputs)
.map(field => user[field] = this.state.inputs[field].value);
...根本没有任何形式的循环构造,那么就没有办法做到这一点。您将需要某种循环。
map
不是正确的选择,因为您没有使用它的返回值。 forEach
或for-of
循环将是更合适的选择:
Object.keys(this.state.inputs)
.forEach(field => user[field] = this.state.inputs[field].value);
或
for (const field of Object.keys(this.state.inputs)) {
user[field] = this.state.inputs[field].value;
}
您可以使用this.state.iputs[field].value
而不是Object.entries
来避免进行第二次查找(Object.keys
)(但这涉及到一堆临时数组,因此……要取舍):
for (const [field, value] of Object.entries(this.state.inputs)) {
user[field] = value;
}
或使用forEach
:
Object.entries(this.state.inputs).forEach(([field, value]) => {
user[field] = value;
});