【问题标题】:Iterate through Object keys and manipulate the key values遍历对象键并操作键值
【发布时间】:2017-04-11 13:33:19
【问题描述】:

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

数组结构:

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

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

我希望所需的输出数组采用这种形式:

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

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

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

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

希望 ES6 中的输入使用 map 进行迭代

【问题讨论】:

  • 这可以用简单的循环来实现,你试过了吗?
  • 我正在使用 es6 ,使用 map 进行循环。我尝试了双映射,但没有以优化的方式进行迭代。
  • 你能发布到目前为止你尝试过的东西吗?

标签: javascript arrays ecmascript-6 javascript-objects


【解决方案1】:

您可以使用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; }

【讨论】:

    【解决方案2】:

    使用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);

    【讨论】:

    • 谢谢。这就是我一直在寻找的。像魅力一样工作。
    【解决方案3】:

    下面的代码应该按照你的规范工作。

    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);

    【讨论】:

    • 键名是可变的,不是固定的,因为它来自服务器响应。
    • 效果很好。继续加油!
    猜你喜欢
    • 2020-10-02
    • 2017-08-30
    • 2019-05-06
    • 2021-10-05
    • 2011-10-12
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 2018-07-15
    相关资源
    最近更新 更多