【问题标题】:How to create an object with two key/value pairs from two separate arrays如何从两个单独的数组中创建具有两个键/值对的对象
【发布时间】:2020-09-15 22:04:57
【问题描述】:

我必须分离我想要组合的数组并创建一个具有两个不同键/值对的对象。无论如何,是否可以从这两个数组中创建一个具有两个键/值对的对象?我正在尝试创建的对象的结构和示例如下。

我的数组结构如下:

formLabel 数组

const labelNames = this.state.formLabels;
*Output*
0: "Name"
1: "Prefix"
2: "First"
3: "Middle"
4: "Last"
5: "Suffix"
6: "Company Name"
7: "Email"
8: "Date Submitted"
9: "Lead Source"
10: "Owner Name"
11: "Owner Email"

formKeys 数组

const labelKeys = this.state.formKeys;
*Output*
0: "1"
1: "1.2"
2: "1.3"
3: "1.4"
4: "1.6"
5: "1.8"
6: "4"
7: "5"
8: "6"
9: "7"
10: "8"
11: "9"

如何才能创建这样的对象?

0: {id: "LABEL KEY WOULD GO HERE", label: "LABEL NAME WOULD GO HERE"}
1: {id: "LABEL KEY WOULD GO HERE", label: "LABEL NAME WOULD GO HERE"}
... etc

【问题讨论】:

  • idlabel 都有“标签”?
  • 听起来好像涉及zip 之类的工具,但问题很模糊,不清楚。
  • 两个数组的长度是否相同?
  • @tadman 我不太确定您从问题中获得这些信息的位置。有两个数组,labelKeys 和 labelNames。这些数组中的每一个的值都将输入到具有两个键/对值的对象中。 Lodash 不参与其中。
  • 通过显示 JavaScript 代码,而不是像“这里有东西”之类的东西,并以一种不是代码的形式输入并留下关于它是什么的歧义,这将有助于使问题更清晰。数组?具有该格式的文本文件?

标签: javascript arrays object


【解决方案1】:

只要有并行数组,就可以将其中一个数组映射到包含当前键和标签的对象列表(按索引)。

const labelNames = [
  "Name"         , "Prefix"     , "First"          ,
  "Middle"       , "Last"       , "Suffix"         ,
  "Company Name" , "Email"      , "Date Submitted" ,
  "Lead Source"  , "Owner Name" , "Owner Email"
];

const labelKeys = [
  "1"   , "1.2" , "1.3" ,
  "1.4" , "1.6" , "1.8" ,
  "4"   , "5"   , "6"   ,
  "7"   , "8"   , "9"
];

const res = labelKeys.map((key, idx) => ({ id: key, label: labelNames[idx] }));

console.log(res);
.as-console-wrapper { top: 0; max-height: 100% !important; }

你也可以创建一个可重用的函数:

const labelNames = [
  "Name"         , "Prefix"     , "First"          ,
  "Middle"       , "Last"       , "Suffix"         ,
  "Company Name" , "Email"      , "Date Submitted" ,
  "Lead Source"  , "Owner Name" , "Owner Email"
];

const labelKeys = [
  "1"   , "1.2" , "1.3" ,
  "1.4" , "1.6" , "1.8" ,
  "4"   , "5"   , "6"   ,
  "7"   , "8"   , "9"
];

const zip = (fn, ...arr) => arr[0].map((_, i) => fn(...arr.map(v => v[i])));

console.log(zip((id, label) => ({ id, label }), labelKeys, labelNames));
.as-console-wrapper { top: 0; max-height: 100% !important; }

【讨论】:

    【解决方案2】:

    从我在这个问题中可以看出,我最好的猜测是:

    const labelNames = [
        "Name",
        "Prefix",
        "First",
        "Middle",
        "Last",
        "Suffix",
        "Company Name",
        "Email",
        "Date Submitted",
        "Lead Source",
        "Owner Name",
        "Owner Email",
    ];
    
    
    const labelKeys = [
        "1",
        "1.2",
        "1.3",
        "1.4",
        "1.6",
        "1.8",
        "4",
        "5",
        "6",
        "7",
        "8",
        "9",
    ];
    
    const newArrayWithObjects = labelNames.map((label,i) => ({ label, id: labelKeys[i] }));
    
    console.log(newArrayWithObjects);

    【讨论】:

      猜你喜欢
      • 2013-01-18
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 2014-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多