使用lodash修剪对象键

时间:2018-08-29 06:14:01

标签: javascript arrays json object lodash

我想修剪对象键y_的出现并获得类似useroutput的输出:

var user =[{"data":"2","y_data1":1},{"data":"4","y_data1":3,"y_data2":3}]
var useroutput=[{"data":"2","data1":1},{"data":"4","data1":3,"data2":3}]

让我知道使用lodash或javascript的任何方法。

2 个答案:

答案 0 :(得分:1)

您可以使用lodash#map来变换user数组中的每个项,并使用lodash#mapKeys来变换user项的每个键。

const result = _.map(user, data => 
  _.mapKeys(data, (v, k) => k.replace(/^y_/, '')));

const user = [
  {"data":"2","y_data1":1},
  {"data":"4","y_data1":3,"y_data2":3}
];

const result = _.map(user, data => 
  _.mapKeys(data, (v, k) => k.replace(/^y_/, '')));

console.log(result);
.as-console-wrapper{min-height:100%;top:0}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>

纯JS解决方案:使用Array#map进行项目转换,并结合使用Object.entries()Array#reduce进行密钥转换。

const result = user.map(data =>
  Object.entries(data).reduce(
    (r, [k, v]) => (r[k.replace(/^y_/, '')] = v, r),
    {}
  )
);

const user = [
  {"data":"2","y_data1":1},
  {"data":"4","y_data1":3,"y_data2":3}
];

const result = user.map(data =>
  Object.entries(data).reduce(
    (r, [k, v]) => (r[k.replace(/^y_/, '')] = v, r),
    {}
  )
);

console.log(result);
.as-console-wrapper{min-height: 100%; top: 0}

答案 1 :(得分:0)

您可以使用array.maparray.reduce和一个正则表达式来匹配目标密钥,而无需使用破折号来做到这一点:

var user = [{"data":"2","y_1":1},{"data":"4","y_1":3,"y_2":3}]; 

console.log(user.map(o => 
  Object.keys(o).reduce((a, e) => {
    a[e.replace(/^y_/, "")] = o[e];
    return a;
  },
{})));