在javascript中的array_flip?

ck_*_*ck_ 25 javascript arrays

是否有任何捷径可以在javascript中完成相当于PHP的array_flip,还是必须通过暴力循环来完成?

它必须用于几十个阵列,所以即使很小的加速也可能会加起来.

Dan*_*ton 22

不要认为有一个内置.但是这里的示例实现:).

function array_flip( trans )
{
    var key, tmp_ar = {};

    for ( key in trans )
    {
        if ( trans.hasOwnProperty( key ) )
        {
            tmp_ar[trans[key]] = key;
        }
    }

    return tmp_ar;
}
Run Code Online (Sandbox Code Playgroud)

  • @Christoph - 看你的观点,但是如果属性不是唯一的,那么一个人真的不应该以ಠ_ಠ开头翻转数组 (3认同)

Tam*_*lyn 7

使用纯ES5的功能形式.对于旧版浏览器,请使用es5-shim.

var example = {a: 'foo', b: 'bar'}; 

var flipped = Object.keys(example)                //get the keys as an array
    .filter(example.hasOwnProperty.bind(example)) //safety check (optional)
    .reduce(function(obj, key) {                  //build up new object
        obj[example[key]] = key;
        return obj;
    }, {});                                       //{} is the starting value of obj

// flipped is {foo: 'a', bar: 'b'}
Run Code Online (Sandbox Code Playgroud)


Afa*_*kin 6

使用下划线 _.invert

_.invert([1, 2]) 
//{1: '0', 2: '1'}

_.invert({a: 'b', c: 'd'}) 
//{b: 'a', d: 'c'}
Run Code Online (Sandbox Code Playgroud)