我从多维数组开始,如下所示:

[
    ['prop1', 'prop2', 'prop3', 'prop3'],
    ['val1', 'val2', 'val3', 'val4']
]


我需要在这样的对象中转换它:

{ prop1: 'val1',
  prop2: 'val2',
  prop3: ['val3', 'val4']
}




通常,我可以使用_.object(array[0], array[1])来解决此问题,但是重复键prop3的存在会使事情复杂得多。

实际_.object将设置prop3: 'val4',擦除val3

有人对我如何实现上述结果有想法吗?

谢谢

最佳答案

我可能会做这样的事情,这很容易变成下划线mixin:

var arr = [
    ['prop1', 'prop2', 'prop3', 'prop3'],
    ['val1', 'val2', 'val3', 'val4']
],
    keys = arr[0],
    vals = arr[1],
    obj = {};

keys.forEach( function( name, index )
{
    if ( !Object.prototype.hasOwnProperty.call(obj, name) )
    {
        obj[name] = vals[index];
    }
    else
    {
        if ( obj[name] instanceof Array )
        {
            obj[name].push( vals[index] );
        }
        else
        {
            var val = obj[name];
            obj[name] = [val, vals[index]];
        }
    }
} );


Example in a fiddle.(变成混入)

jsPerf comparison with underscore-based code.

关于javascript - JS Lodash:带有对象的多维数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22845759/

10-11 07:00