JavaScript相当于PHP函数:array_flip

时间:2009-07-21 13:41:49

标签: javascript arrays

是否有任何快捷方式可以在JavaScript中完成等效的PHP's array_flip function,还是必须通过强力循环来完成?

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

7 个答案:

答案 0 :(得分:21)

不要认为内置了一个。示例实现here,尽管是:)

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

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

    return tmp_ar;
}

答案 1 :(得分: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'}

答案 2 :(得分:6)

使用underscore _.invert

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

_.invert({a: 'b', c: 'd'}) 
//{b: 'a', d: 'c'}

答案 3 :(得分:2)

使用jQuery:

var array_flipped={};
$.each(array_to_flip, function(i, el) {
  array_flipped[el]=i;
});

答案 4 :(得分:2)

我猜你在谈论的是对象而不是阵列

function flip(o){
    var newObj = {} 
    Object.keys(o).forEach((el,i)=>{
        newObj[o[el]]=el;
    });
    return newObj;
}

否则可能是

function flip(o){

    var newObj = {} 

    if (Array.isArray(o)){

        o.forEach((el,i)=>{
            newObj[el]=i;
        });

    } else if (typeof o === 'object'){

        Object.keys(o).forEach((el,i)=>{
            newObj[o[el]]=el;
        });

    }

    return newObj;

}

答案 5 :(得分:1)

当前的最佳答案对我来说没有达到预期的效果,因为键值偏移+1。 (所以返回的数组tmpArr(0)也总是未定义的。所以我从键值中减去1,它按预期工作。

run() run() run()

答案 6 :(得分:0)

简单的方法

const obj = { a: 'foo', b: 'bar' },
      keys = Object.keys(obj),
      values = Object.values(obj),
      flipped = {};
for(let i=0; i<keys.length; i++){
    flipped[values[i]] = keys[i];
}
console.log(flipped);//{foo: "a", bar: "b"}