Javascript 从一系列键中提取相同的值
我正在尝试使用解构从一些对象中快速提取“value”属性。。有没有一个简单的方法可以从中得到它?我想可能有一些复杂的解构,我还没有完全弄明白 我知道我可以使用循环之类的,但我想让它更优雅一点。我正在寻找一个不重复的,理想的1-2线解决方案。我想使用地图,但这只适用于数组Javascript 从一系列键中提取相同的值,javascript,object,ecmascript-6,destructuring,Javascript,Object,Ecmascript 6,Destructuring,我正在尝试使用解构从一些对象中快速提取“value”属性。。有没有一个简单的方法可以从中得到它?我想可能有一些复杂的解构,我还没有完全弄明白 我知道我可以使用循环之类的,但我想让它更优雅一点。我正在寻找一个不重复的,理想的1-2线解决方案。我想使用地图,但这只适用于数组 formData = { name: {val: 'myName', key: 'value', etc: 'more data'} province: {val: 'myProvince', key: 'value',
formData = {
name: {val: 'myName', key: 'value', etc: 'more data'}
province: {val: 'myProvince', key: 'value', etc: 'more data'}
dateOfBirth: {val: 'myBDAY!', key: 'value', etc: 'more data'}
}
//desired outcome:
{
name: 'myName',
province: 'myProvince',
dateOfBirth: 'myBDAY!'
}
//attempt 1
let customer = { name, province, dateOfBirth} = formData; //hrm doesn't get me there
分解用于从数组或对象的不同元素分配多个变量,这不是您要做的。您只需执行以下操作:
let customer = {
name: formData.name.val,
province: formData.province.val,
dateOfBirth: formData.dateOfBirth.val
}
如果不想显式列出所有属性,只需使用循环即可
let customer = {};
for (var k of Object.keys(formData)) {
customer[k] = formData[k].val;
}
分解用于从数组或对象的不同元素分配多个变量,这不是您要做的。您只需执行以下操作:
let customer = {
name: formData.name.val,
province: formData.province.val,
dateOfBirth: formData.dateOfBirth.val
}
如果不想显式列出所有属性,只需使用循环即可
let customer = {};
for (var k of Object.keys(formData)) {
customer[k] = formData[k].val;
}
难以理解的一行是:
let customer = Object.keys(formData).reduce(
(acc, key) => Object.assign(acc, {[key]: formData[key].val}), {});
抓取.val
关闭对象中的每个值,并返回具有相同键的新对象
这基本上相当于:
let customers = {};
for (const key of Object.keys(formData)) customers[key] = formData[key].val;
难以理解的一行是:
let customer = Object.keys(formData).reduce(
(acc, key) => Object.assign(acc, {[key]: formData[key].val}), {});
抓取.val
关闭对象中的每个值,并返回具有相同键的新对象
这基本上相当于:
let customers = {};
for (const key of Object.keys(formData)) customers[key] = formData[key].val;
由于您不喜欢Barmar的答案,因此可以结合使用
Object.keys
和生成的数组的reduce
方法:
let customer = Object.keys(formData).reduce(function(acc, key) {
acc[key] = formData[key].val;
return acc;
}, {});
由于您不喜欢Barmar的答案,因此可以结合使用
Object.keys
和生成的数组的reduce
方法:
let customer = Object.keys(formData).reduce(function(acc, key) {
acc[key] = formData[key].val;
return acc;
}, {});
你说过你想使用解构…那么让我们这样做:
let customer = {};
for (let k in formData) ({[k]: {val: customer[k]}} = formData);
但实际上,要避免这种情况,请使用清晰易读的属性赋值:-)您说过要使用解构…那么让我们这样做:
let customer = {};
for (let k in formData) ({[k]: {val: customer[k]}} = formData);
但实际上,要避免这种情况,而是使用清晰易读的属性赋值:-)您在哪里指定在分解结构时应使用每个元素的
val
属性?如果您使用下划线或lodash,则pulk
它。或者Object.keys(formData).reduce(函数(acc,key){acc[key]=formData[key].val;返回acc;},{})代码>@Barmar nowhere。。这是一次不好的“尝试”,但我想不出如何做得好。@JaredSmith哼!一方面我不想包括lodash。。我正在尝试ES6它,您在哪里指定它在分解结构时应该使用每个元素的val
属性?如果您使用下划线或lodash,则pulk
它。或者Object.keys(formData).reduce(函数(acc,key){acc[key]=formData[key].val;返回acc;},{})代码>@Barmar nowhere。。这是一次不好的“尝试”,但我想不出如何做得好。@JaredSmith哼!一方面我不想包括lodash。。我正在尝试ES6它可以正常工作,但是有一个不需要的(至少我是这样)重复级别(实际代码有8个属性,并且是一个额外的级别深),那么您可能只想对in
循环执行。因为这是ES6,所以对(Object.keys(formData)的var k)执行会更安全{
以避免在原型链中拾取可枚举的道具。我仍然不能熟练掌握所有ES6新功能。这可以正常工作,但存在不必要的(至少对我而言)重复级别(实际代码有8个属性,并且是额外的级别)然后,您可能只想对in
循环执行。因为这是ES6,所以对(Object.keys(formData)的var k)执行{
会更安全,以避免在原型链中拾取可枚举的道具。我对ES6的所有新功能仍然不太熟悉。