简体   繁体   English

精确地将2列从2D数组映射到key:value对

[英]Concisely mapping 2 columns from 2D array to key:value pairs

In this example snippet of code, I selectively convert 2 columns from my 2D array into an object. 在此示例代码段中,我有选择地将2D数组中的2列转换为一个对象。 The 1st column represents the keys, the 2nd represents the values. 第一列代表键,第二列代表值。

I feel like there is a more concise way of codifying this idea without so many lines of code. 我觉得没有这么多代码行,就有一种更简洁的方法来整理这个想法。

var my2dArray = [ ['a',2], ['b',3], ['c',4] ];
var keys = [];
var values = [];
var myObj = {};

for(var row = 1; row < my2dArray.length; row++) {
    keys[row] = my2dArray[row][0];
    values[row] = my2dArray[row][1];
    myObj[keys[row]] = values[row];
}

console.log(prod_compare); // outputs object

In reality, I have a 4 column array. 实际上,我有一个4列数组。 Don't mind the simplicity of my2dArray . 不要介意my2dArray的简单性。 Is there a way to select these two columns for mapping to an object without having to declare 2 temporary arrays? 有没有一种方法可以选择这两个列以映射到对象,而不必声明2个临时数组?

Your code is fundamentally OK, but it can be more concise without being obfuscated: 您的代码从根本上来说还可以,但是可以更加简洁明了:

var my2dArray = [ ['a',2], ['b',3], ['c',4] ];
var myObj = {};

for (var i=0, iLen=my2dArray.length; i<iLen; i++) {
  myObj[my2dArray[i][0]] = my2dArray[i][1];
}

This may convert [['a', 1, 2, 3], ['b', 1, 2, 3]] to {a: [1, 2, 3], b: [1, 2, 3]} . 这可以将[['a', 1, 2, 3], ['b', 1, 2, 3]]{a: [1, 2, 3], b: [1, 2, 3]}

for(var row = 0; row < my2dArray.length; row++) {
    keys[row] = my2dArray[row][0];
    values[row] = my2dArray[row].slice(1);
    myObj[keys[row]] = values[row];
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM