在具有多个条目的对象中使用反转

Use invert in an object with many entries

我正在尝试反转 keys/values。

所以,我正在尝试类似的方法:

var _ = require('underscore');

var myObj = [

    {'name': 'Mike', 'number' : 'b1' , 'level' : 0 },
    {'name': 'Tom', 'number' : 'b2' , 'level' : 0 }
];


Object.keys(myObj).forEach(function(k) { 
    _.invert(myObj[k]);
});



console.log(myObj);

所以,我想收到:

{'Mike': 'name', 'b1' : 'number' , '0' : level },
{'Tom': 'name', 'b2' : 'number' , '0' : level }

但是上面又给了我初始对象。

Lodash _.invert just return a new inverted object, so you need to update the array element with returned object. Also there is no need for Object.keys, since it's an array Array#forEach 足够了。

var myObj = [

  {
    'name': 'Mike',
    'number': 'b1',
    'level': 0
  }, {
    'name': 'Tom',
    'number': 'b2',
    'level': 0
  }
];

myObj.forEach(function(v, k) {
  myObj[k] = _.invert(v);
});



console.log(myObj);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.js"></script>


如果要生成新的倒排数组,请使用Array#map方法。

var res = myObj.map(_.invert);

var myObj = [

  {
    'name': 'Mike',
    'number': 'b1',
    'level': 0
  }, {
    'name': 'Tom',
    'number': 'b2',
    'level': 0
  }
];

var res = myObj.map(_.invert);



console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.js"></script>

_.invert() 不会改变输入对象。这是您需要的:

var myObj = [
    {'name': 'Mike', 'number' : 'b1' , 'level' : 0 },
    {'name': 'Tom', 'number' : 'b2' , 'level' : 0 }
];

// ES6 one-liners with arrow function
// with array input
var invertedObj = myObj.map(k => { _.invert(myObj[k]) });
// with object input
var invertedObj = Object.keys(myObj).map(k => { _.invert(myObj[k]) });

// ES5
// with array input
var invertedObj = myObj.map(function(k) { 
  return _.invert(myObj[k]);
});
// with object  input
var invertedObj = Object.keys(myObj).map(function(k) { 
  return _.invert(myObj[k]);
});

首先,您的 myObj 是一个数组,而不是一个对象,因此无需对其执行 Object.keys()

var array = [
    {'name': 'Mike', 'number' : 'b1' , 'level' : 0 },
    {'name': 'Tom', 'number' : 'b2' , 'level' : 0 }
];

var myNewArray = array.map(object => {
    var box = {};
    Object.keys(object).forEach(key => {
        box[object[key]] = key;
    });
    return box;
});

这应该可以满足您的要求:

var result = _.map(myObj, _.invert);