在具有许多条目的对象中使用invert

时间:2016-06-11 17:28:53

标签: javascript underscore.js

我正在尝试反转键/值。

所以,我正在尝试这样的事情:

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 }

但是上面再次给了我最初的对象。

4 个答案:

答案 0 :(得分:1)

Lodash _.invert 只返回一个新的反转对象,因此您需要使用返回的对象更新数组元素。此外,不需要 Object.keys ,因为它是一个数组 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>

答案 1 :(得分:1)

_.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]);
});

答案 2 :(得分:1)

这应该做你想要的:

  $("#play").click(function() {
    if ($("#options").val() != "none") { // NOTE: not working
      $(this).hide();
      $("#options").hide();
      $("#player").show();
    }else {
      alert("You haven't selected a theme")
    }
  });

答案 3 :(得分:0)

首先,您的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; });

select * from mytable
  where myfield in
    (
      SELECT regexp_substr(:bindvar,'[^,]+', 1, level) items
      FROM dual
      CONNECT BY regexp_substr(:bindvar, '[^,]+', 1, level) is not null
    );