lodash - 将项目/变换对象转换为键值数组

时间:2015-08-19 16:09:49

标签: javascript lodash

我即将使用forOwn来迭代对象的属性并手动创建一个数组,并且无法帮助认为已经有一个oneliner已经可用。

{ 
  prop1 : "value",
  prop2: { sub:1}
}

为:

[ 
   {key: "prop1", value: "value"},
   {key: "prop2", value: {sub:1}}
]

由于

6 个答案:

答案 0 :(得分:28)

您可以将lodash的_.map()shorthand property names一起使用:



const obj = { 
  prop1 : "value",
  prop2: { sub:1}
};

const result = _.map(obj, (value, prop) => ({ prop, value }));

console.log(result);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>
&#13;
&#13;
&#13;

或者您可以使用Object#entriesArray.map()以及array destructuring使用Loading an AngularJS controller dynamically执行此操作:

&#13;
&#13;
const obj = { 
  prop1 : "value",
  prop2: { sub:1}
};

const result = Object.entries(obj).map(([prop, value]) => ({ prop, value }));

console.log(result);
&#13;
&#13;
&#13;

答案 1 :(得分:10)

你甚至不需要lodash:

var arr = Object.keys(obj).map(function(key){
  return { key: key, value: obj[key] };
});

答案 2 :(得分:10)

ES6的一点点:

_.map( obj, (value, key) => ({key,value}) )

答案 3 :(得分:2)

如果符合您的情况,您可以使用<meta name="viewport" content="width=device-width,initial-scale=1.0">

pairs

参考:https://lodash.com/docs#pairs

答案 4 :(得分:2)

如果您使用 lodash / fp ,则可以使用_.entries

&#13;
&#13;
const a = { one: 123, two: { value: 'b' }};

const pairs = _.entries(a).map(p => ({ key:p[0], value: p[1] }))

console.log(pairs)
// [
//   {
//     "key": "one",
//     "value": 123
//   },
//   {
//     "key": "two",
//     "value": {
//       "value": "b"
//     }
//   }
// ]
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash-fp/4.15.0/lodash-fp.js"></script>
&#13;
&#13;
&#13;

答案 5 :(得分:1)

在回应Ori的评论和完整性时,我发布了_.forOwn版本。它稍微快一些,但你需要先声明数组(不是一个线程)。

var arr = [];
_.forOwn(obj,function(item, key) {
    arr.push({ property : key, value : item});
});