在具有多个条目的对象中使用反转
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);
我正在尝试反转 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);