如何将两个数组合并为一个具有键值对的对象?

时间:2018-06-06 12:28:41

标签: javascript arrays object

我有2个数组,数组a包含键,数组b包含它们的值

let a = ['name', 'options', 'address', 'options', 'gender', 'options'];
let b = ['john doe', 'a', 'india', 'b', 'male', 'c'];

我想要这样的输出

 { 
  'name': 'john doe',
  'options': 'a, b, c',
  'address': 'india',
  'gender': 'male'
 }

4 个答案:

答案 0 :(得分:3)

使用Array.reduce



let a = ['name', 'options', 'address', 'options', 'gender', 'options'];
let b = ['john doe', 'a', 'india', 'b', 'male', 'c'];

let r = a.reduce((o,c,i) => {o[c] = o[c] ? o[c] + ", " + b[i]:b[i]; return o;}, {})
console.log(r);




答案 1 :(得分:1)

另一种方法如下所示。这循环a.length次,获取a的值并将其作为c的键添加,其中key的值是b的值。以下是其工作原理的细分:

对于a中的每个元素:如果c中没有元素a [i]的元素,则创建该键并将其设置为b [i]中的值。如果元素已经存在于c中(那么键必须表示数组,而不是单个项),如果该值是单个项,则将其设为数组,然后重新插入第一个值,然后在任何情况下,推送该项目的新项目。

let a = ['name', 'options', 'address', 'options', 'gender', 'options','options'];
let b = ['john doe', 'a', 'india', 'b', 'male', 'c', 'd'];

let c = {};

for (let i=0; i<a.length; i++) {
    if (typeof c[a[i]] === 'undefined') {
        c[a[i]] = b[i];
    } else {
        if (c[a[i]] instanceof Array === false) {
            c[a[i]] = [c[a[i]]];
        }
        c[a[i]].push(b[i]);
    }
}

console.log(c);

答案 2 :(得分:0)

  invert(object){ 
    let invertedObject ={};
    for(let key in object){
      const originalValue = object[key];
      invertedObject = {originalValue : key}
    }
    return invertedObject
  }

答案 3 :(得分:0)

let a = ['name', 'options', 'address', 'options', 'gender', 'options'];
let b = ['john doe', 'a', 'india', 'b', 'male', 'c'];

let r = a.reduce((o,c,i) => {o[c] = o[c] ? o[c] + ", " + b[i]:b[i]; return o;}, [])
console.log(r);