Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从一系列键中提取相同的值_Javascript_Object_Ecmascript 6_Destructuring - Fatal编程技术网

Javascript 从一系列键中提取相同的值

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',

我正在尝试使用解构从一些对象中快速提取“value”属性。。有没有一个简单的方法可以从中得到它?我想可能有一些复杂的解构,我还没有完全弄明白

我知道我可以使用循环之类的,但我想让它更优雅一点。我正在寻找一个不重复的,理想的1-2线解决方案。我想使用地图,但这只适用于数组

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的所有新功能仍然不太熟悉。