2009-07-21 61 views

回答

19

不要以为内置了一个。示例实现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

@pianoman - 。我加了hasOwnProperty检查,希望你不介意= ) – 2009-07-21 13:59:16

+1

我不会推荐phpjs.org:代码质量是令人沮丧的,一些功能在IE中根本不起作用!如果你想用JS编程,学习它! – Christoph 2009-07-21 15:27:06

+0

也请记住,只有属性值具有唯一的字符串表示形式才能可靠地工作 – Christoph 2009-07-21 15:32:41

2

与jQuery:

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

使用纯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'} 
5

使用underscore _.invert

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

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

我想你所谈论的对象不是数组

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; 

} 
0

目前顶级答案没有我rk与我预期的一样,因为关键值偏移+1。 (所以返回的数组tmpArr(0)也总是不确定的所以我从关键值中减去1和它的工作如预期

function array_flip2 (trans) { 
    var key 
    var tmpArr = {} 

    for (key in trans) { 
    if (!trans.hasOwnProperty(key)) { 
     continue 
    } 
    tmpArr[trans[parseInt(key)]-1] = (key) 
    } 
    return tmpArr 
}