首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从一系列键中提取相同的值

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

Stack Overflow用户
提问于 2015-11-26 09:44:52
回答 4查看 56关注 0票数 0

我正在尝试使用解构从一些对象中快速提取“value”属性。有没有一种简单的方法可以从这里得到它?我想对于一些我还没有完全理解的复杂的解构的东西,这可能是可能的。

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

代码语言:javascript
复制
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
EN

回答 4

Stack Overflow用户

发布于 2015-11-26 09:52:16

解构用于从数组或对象的不同元素赋值多个变量,这不是您要做的。你可以这样做:

代码语言:javascript
复制
let customer = { 
    name: formData.name.val, 
    province: formData.province.val,
    dateOfBirth: formData.dateOfBirth.val
}

如果不想显式列出所有属性,只需使用循环。

代码语言:javascript
复制
let customer = {};
for (var k of Object.keys(formData)) {
    customer[k] = formData[k].val;
}
票数 2
EN

Stack Overflow用户

发布于 2015-11-26 09:56:23

很难读懂的一行代码是:

代码语言:javascript
复制
let customer = Object.keys(formData).reduce(
        (acc, key) => Object.assign(acc, {[key]: formData[key].val}), {});

获取对象中的每个值的.val,并返回一个具有相同键的新对象。

这基本上等同于:

代码语言:javascript
复制
let customers = {};
for (const key of Object.keys(formData)) customers[key] = formData[key].val;
票数 1
EN

Stack Overflow用户

发布于 2015-11-26 09:57:07

因为您不喜欢Barmar的回答,所以可以组合使用Object.keys和结果数组的reduce方法:

代码语言:javascript
复制
let customer = Object.keys(formData).reduce(function(acc, key) {
    acc[key] = formData[key].val;
    return acc;
}, {});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33929332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档