迭代对象键并操纵键值

时间:2017-04-11 13:33:20

标签: javascript arrays ecmascript-6 javascript-objects

我有一组来自服务器响应的对象。

数组结构:

[
  {
    col1: ["a", "b"],
    col2: ["c", "d"]
  },

  {
    col1: ["e", "f"],
    col2: ["g", "h"]
  }
]

我希望所需的输出数组采用以下形式:

[
  {
    col1: "b",
    col2: "d"
  },

  {
    col1: "f",
    col2: "h"
  }
]

基本上我想将最初为数组的Object键值转换为单个值,该值将是Object keys数组的第二个元素。

我可以通过使用toString()将Object Keys数组转换为逗号分隔字符串来进行转换,然后执行string.split(",")[1]但我无法遍历Object键。

更喜欢使用map for iteration的ES6中的输入

4 个答案:

答案 0 :(得分:0)

以下代码应符合您的规范。



var arr = [ {col1: ["a","b"], col2: ["c","d"] }, {col1: ["e","f"], col2: ["g","h"] } ]


// [ {col1: "b" , col2: "d" }, {col1: "f", col2: "h" } ]

arr2 = [];

arr.forEach(e => {
  let currObj = {};
  Object.keys(e).forEach(f => {
    currObj[f] = e[f][1]
  })
  arr2.push(currObj)
})

console.log(arr2);




答案 1 :(得分:0)

使用Array#reduceObject.keys的可能解决方案。



var arr = [ {col1: ["a","b"], col2: ["c","d"] }, {col1: ["e","f"], col2: ["g","h"] } ],
    res = arr.reduce(function(s,a) {
      var obj = {};
      Object.keys(a).map(function(c) {
        obj[c] = a[c][1];
      })
      s.push(obj);
      return s;
    }, []);
    
    console.log(res);




答案 2 :(得分:0)



var data = [ {col1: ["a","b"], col2: ["c","d"] }, {col1: ["e","f"], col2: ["g","h"] } ];
var res=[];
var d = data.reduce(function(all,item){
  res.push({col1:item.col1[1],col2:item.col2[1]});
  return all;
},{});

console.log(res);




答案 3 :(得分:0)

您可以将Array#mapObject.assignspread syntax ...的组合与新对象的内部映射与所需的键/值结合使用。

var data = [{ col1: ["a", "b"], col2: ["c", "d"] }, { col1: ["e", "f"], col2: ["g", "h"] }],
    result = data.map(o => Object.assign({}, ...Object.keys(o).map(k => ({ [k]: o[k][1] }))));

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