如何将两个数组作为键和值合并到一个键具有多个值的对象中?

问题描述 投票:0回答:5

我的输入如下:

Input: keys = ['username', 'first-name', 'last-name', 'age', 'username'] and  values = ['johndoe', 'John', 'Doe', 35, 'johnny']

而且我希望我的输出看起来像这样:

Output: {username: ['johndoe', 'johnny'], firstName: 'John', lastName: 'Doe', age: 35}

到目前为止,这是我的代码,我知道这不能完全解决具有'johndoe''johnny'问题的用户名:

function mergeArrays(keys, values) {
  var obj = {};
  if (keys.length != values.length)
    return null;
  for (var index in keys)
    obj[keys[index]] = values[index];
  return obj;
}
javascript arrays dictionary object key-value
5个回答
0
投票

“ forEach”功能可能有用。

var keys = ['username', 'first-name', 'last-name', 'age', 'username'] 
var values = ['johndoe', 'John', 'Doe', 35, 'johnny']

var result = {}
keys.forEach(function(x, i) {
  if (result[x]) {
    if (typeof result[x] == 'Array') {result[x].push(values[i])} 
    else result[x] = [result[x],values[i]]
  }
  else result[x] = values[i]

})

console.log(result)

0
投票

使用concat()

function mergeArrays(keys, values) {
  var obj = {};
  if (keys.length != values.length)
    return null;
  for (var index in keys) {
    if (obj[keys[index]]) {
      obj[keys[index]] = [].concat(obj[keys[index]], values[index])
    } else {
      obj[keys[index]] = values[index];
    }
  }
  return obj;
}

var res = mergeArrays(['username', 'first-name', 'last-name', 'age', 'username'], ['johndoe', 'John', 'Doe', 35, 'johnny'])

console.log(res)

0
投票
const keys = ['username', 'first-name', 'last-name', 'age', 'username'];
const values = ['johndoe', 'John', 'Doe', 35, 'johnny'];
const result = {};

keys.forEach((val, key) => {
  if (!result[val]) {
    result[val] = values[key];
  } else if (Array.isArray(result[val])) {
    result[val].push(values[key]);
  } else {
    result[val] = [result[val], values[key]];
  }
});

console.log(result);

0
投票

let keys = ['username', 'first-name', 'last-name', 'age', 'username'];
let values = ['johndoe', 'John', 'Doe', 35, 'johnny'];

let transformedData = keys.reduce((result,item,index)=>{
     if (index>=values.length-1) return result;
     result[item]= index===0 ? [values[0],values[values.length-1]] : values[index];
     return result;
},{});

console.log(transformedData);

-1
投票

 keys = ['username', 'first-name', 'last-name', 'age', 'username'];
 values = ['johndoe', 'John', 'Doe', 35, 'johnny'];
 
 function mergeArr(keys, values){
    let result = {};
    keys.forEach((key, i) => {
       result[key] = values[i];
    })
    return result;
 }
 
 let result = mergeArr(keys, values);
 
 console.log(result);
© www.soinside.com 2019 - 2024. All rights reserved.