【问题标题】:Concisely mapping 2 columns from 2D array to key:value pairs简明地将 2 列从 2D 数组映射到键:值对
【发布时间】:2014-02-14 04:20:08
【问题描述】:

在这个代码 sn-p 示例中,我有选择地将 2 列从我的二维数组转换为一个对象。第 1 列代表键,第 2 列代表值。

我觉得有一种更简洁的方式来编码这个想法而无需那么多代码行。

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

实际上,我有一个 4 列数组。不要介意my2dArray 的简单性。有没有办法选择这两列映射到一个对象而不必声明 2 个临时数组?

【问题讨论】:

  • 我真的看不到在您的代码中使用 keysvalues...此外,数组索引从 0 开始,而不是 1。
  • 我将 2 个相关列转换为它们自己的一维数组。至于for循环中的初始化,我是故意的。
  • 是的,但是您说这两个数组是临时的,我假设您以后不需要它。如果是正确的,我不明白你为什么不能直接使用myObj[my2dArray[row][0]]=my2dArray[row][1];
  • 如果这是一个答案,我会给予你的功劳。

标签: javascript multidimensional-array javascript-objects


【解决方案1】:

你的代码基本没问题,但它可以更简洁而不会被混淆:

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];
}

【讨论】:

  • 不确定iLen 的用途,但这很好用!谢谢!!
  • 这是一个小的优化,因此 my2dArray.length 不会在每个循环中访问。可能在现代浏览器中产生零差异,我猜这主要是习惯。
  • 这完全有道理。从现在开始我会这样做!每一点都很重要。
【解决方案2】:

这可能会将[['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];
}

【讨论】:

    猜你喜欢
    • 2018-03-10
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多