【问题标题】:Merge array with 1st array as object key and 2nd array as its value合并数组,第一个数组作为对象键,第二个数组作为它的值
【发布时间】:2018-04-16 17:13:19
【问题描述】:

我使用 .concat 组合了三个数组

keyArr =  ["meat", "veggies", "fish"]
dataArr = meatArr.concat(vegArr,fishArr);

//value
dataArr = [0: "chicken", 1: "pork", 2: "lettuce", 3: "beans", 4: "shark", 5: "nemo"]

我将使用 keyArr 作为我的“key”来换取数组的“index”。我正在将我进入我的密钥的数据作为一个对象合并。此外,将奇数与偶数分开。预期输出:

[
{meat: "chicken", veggies: "lettuce", fish:"shark", },
{meat:"pork", veggies: "beans", fish: "nemo"}
]

强烈推荐任何关于我将如何工作的建议或方法。谢谢

【问题讨论】:

  • 预期输出无效(重复键)
  • 您的预期输出没有意义。一个对象属性只能有一个值。
  • 你如何决定预期的输出?
  • 您将获得的最接近的将是每个“键”引用一组值,例如 {meat: ["chicken", "pork"], veggies: [...], fish: [...]}
  • 对不起,我必须编辑输出。我忘了把它们分开

标签: javascript arrays object key


【解决方案1】:

由于每个单独的数组都有相同数量的项目,因此创建一个数组对象,迭代一个数组,然后使用对象中的键和迭代中的索引将数组映射到新的对象数组。

不需要.concat() 数组。

var meatArr = ["chicken", "pork"],
    vegArr = ["lettuce", "beans"],
    fishArr = ["shark", "nemo"];
    
var arrays = {meat: meatArr, veggies: vegArr, fish: fishArr};
    
var result = meatArr.map((_, i) => 
  Object.keys(arrays)
        .reduce((res, key) => ({...res, [key]: arrays[key][i]}), {})
);

console.log(result);

您可能需要一个转译器,具体取决于您所针对的 JS 实现。

【讨论】:

  • 你改变了来源。
  • @NinaScholz:不,OP 将.concat() 的结果显示为一个新的数组分配,这有点令人困惑,但显然仍然是试图显示结果。他们应该将其作为代码注释,例如:// dataArr is now: ["chicken", "pork", "lettuce", "beans", "shark", "nemo"]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
  • 2019-01-27
  • 2012-03-31
  • 1970-01-01
相关资源
最近更新 更多