【问题标题】:How to merge two array in one object?如何将两个数组合并到一个对象中?
【发布时间】:2018-11-04 11:40:09
【问题描述】:

我有两个数组名和标记

我正在尝试将两个数组合并为一个对象,以便以后可以迭代。 就像有一个两列的表,第一个来自 API 的返回名称,如 A、b、c、d 等,第二个返回标记,如 40、50、55、60 等。 收到后,我试图将其作为一个可迭代对象

finalOutput = [
0: {
    A : 45
}
1: {
    B: 55
}
2: {
    C: 60
}
and so on...
]

我正在尝试采用以下方法,这不是一个完整的解决方案。你能建议我应该采取什么方法吗?

 var name = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'I'];
    var tName = name.split(',');
    var mark = ['45', '55', '60', '65', '70', '75', '80', '85'];
    
    var nameObj = Object.assign({}, tName );
    console.log(nameObj);
    var tMark = Object.assign({}, mark);
    
    var finalOutput = [].concat(tName, tMark);
    
    console.log('finalOutput', finalOutput);

【问题讨论】:

  • 我正在尝试将名称的值映射到标记的值。任何解决方案都可以。
  • 两个数组name and mark 是否总是等长
  • name.split(',') 应该是不可能的 - 你不能在数组上调用 .split(...)
  • 另外,finalOutput 的结构也无效。你展示了一个包含如下键值对的数组:[0: {A: 45} 1: {B: 55} ...],这是不可能的(而且还缺少逗号)。你可以以这样的数组结尾:[{A: 45}, {B: 55}, {C: 60}, ...] 或这样的对象:{A: 45, B: 55, C: 60,...} - 你的目标是什么?

标签: javascript arrays


【解决方案1】:

您可以简单地使用Array.map(),假设您的两个数组具有相同的长度,并且您想要一个对象数组作为最终输出,请尝试以下操作:

let names = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'I'];
let mark = ['45', '55', '60', '65', '70', '75', '80', '85'];

let result = names.map((name,index)=> ({[name] : mark[index]}));

console.log(result);

【讨论】:

  • 感谢您提供地图解决方案。效果很好。
  • @SiddharthRay 很乐意为您提供帮助
【解决方案2】:

你可以使用 Array.reduce():

const names = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'I'];
const marks = ['45', '55', '60', '65', '70', '75', '80', '85'];

const toObject = names.reduce((accum, item, i) => {
  accum[item] = marks[i];
  return accum;
}, {})

console.log(toObject);

Array.map() 可能更具可读性,但我非常喜欢(并使用)reduce-object-creating 模式(感谢 Wes Bos)。

您可能希望创建函数来执行此操作,以便重复使用它:

const names = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'I'];
const marks = ['45', '55', '60', '65', '70', '75', '80', '85'];

const toObject = (toProp, toValue) => {
  return toProp.reduce((accum, item, i) => {
    accum[item] = toValue[i];
    return accum;
  }, {})
}

console.log(toObject(names, marks));

【讨论】:

  • 感谢它返回到单个对象 [object Object] { A:“45”,B:“55”,C:“60”,D:“65”,E:“70” ,F:“75”,G:“80”,I:“85”}
猜你喜欢
  • 2021-01-18
  • 2021-08-17
  • 2021-07-13
  • 1970-01-01
  • 2017-02-04
  • 2022-01-20
  • 2021-07-27
  • 1970-01-01
  • 2022-01-04
相关资源
最近更新 更多