Javascript将2个字符串数组转换为映射

时间:2018-11-09 16:28:45

标签: javascript

我有两个字符串数组键和值:

let keys = [a,b,c,d]
let values = [1,2,3,4]

如何将它们转换为地图?

预期输出为:

{a: "1", b: "2", c: "3", d: "4"}

6 个答案:

答案 0 :(得分:8)

您可以在ES6中使用Map

var myMap = new Map();

// setting the values
myMap.set('key1', 'value1');
myMap.set('key2', 'value2');
myMap.set('key3', 'value3');

您的答案:

for (let i = 0; i < keys.length; i++) {
     myMap.set(keys[i], values[i]); 
}

答案 1 :(得分:3)

首先创建一个对象。然后遍历数组并将键和值添加到对象。

let keys = ['a','b','c','d'];
let values = [1,2,3,4];

let obj = {};

keys.forEach((key, index) => {
  obj[key] = values[index]
});

console.log(obj);

答案 2 :(得分:1)

您可以在任何数组上使用array reduce并使用index从另一个数组中检索值

let keys = ['a', 'b', 'c', 'd'];
let values = [1, 2, 3, 4];
let k = keys.reduce((acc, curr, index) => {
  acc[curr] = values[index]
  return acc;
}, {});

console.log(k)

答案 3 :(得分:1)

首先,您需要正确声明字符串数组。

let keys = ['a', 'b', 'c', 'd'];
let values = ['1', '2', '3', '4'];

var zip = (target, ...arr) => {
  if (target == null) throw Error('Target is undefined');
  if (arr[0] == null || arr[1] == null) throw Error('Lists must not be null');
  if (arr[0].length !== arr[1].length) throw Error('Lists must match in length');
  if (Array.isArray(target)) {
    arr[0].forEach((x, i) => target.push([arr[0][i], arr[1][i]]));
  } else if (typeof target === 'object') {
    arr[0].forEach((x, i) => target[arr[0][i]] = arr[1][i]);
  } else {
    throw Error('Unsupported target type');
  }
  return target;
}

var zipObj = (...arr) => zip.call(null, {}, ...arr);
var zipArr = (...arr) => zip.call(null, [], ...arr);

//console.log(zip({}, keys, values));
console.log(zipObj(keys, values)); // Zip object

//console.log(zip([], keys, values));
console.log(zipArr(keys, values)); // Zip array
.as-console-wrapper { top: 0; max-height: 100% !important; }

答案 4 :(得分:0)

使用lodash时,这是单线的:

_.zipObject(keys,values)

答案 5 :(得分:0)

这应该可以解决问题:

let keys = ['a','b','c','d']
let values = [1,2,3,4]
let mapped = keys.reduce((accumulator, current, index) => {
    accumulator[current] = values[index];
    return accumulator;
}, {});

console.log(mapped)
// Result should be:
{a: 1, b: 2, c: 3, d: 4}

Reduce是一种功能强大的方法,可用于各种任务。

在这里,我们将keys的给定值“减少”到一个对象中,其中keys是键,而values是相关值。

reduce中的第一个参数是一个回调函数,您至少需要传递accumulatorcurrent变量(可以使用不同的名称);其他参数是indexarray,它们代表迭代的当前索引和要迭代的原始数组。

第二个参数是accumulator的初始值;默认情况下,它将是第一个current值,但在本例中,我们将其设置为{},因此我们可以将其视为对象。

我希望这会有所帮助!