【问题标题】:How can i get an object from an array of objects如何从对象数组中获取对象
【发布时间】:2019-02-02 15:13:23
【问题描述】:

在入口处,我有这样一个带有对象的数组。 将传入的对象数组转换为对象的函数。 使用该功能,我需要将其带到此表单中。

var array = [ 
   { k1:v1 },
   { k2:v2 },
   { k3:v3 }
];

function arrayToObject(array) { return object }

var object = { 
    v1: k1,
    v2: k2,
    v3: k3, 
}

【问题讨论】:

标签: javascript arrays object javascript-objects


【解决方案1】:

您可以指定Object.assign 并传播颠倒的对象。

var array = [ { k1: 'v1' }, { k2: 'v2' }, { k3: 'v3' }],

object = Object.assign(...array.map(o => Object
    .entries(o)
    .reduce((r, [k, v]) => Object.assign(r, { [v] : k }), {})
));

console.log(object);

【讨论】:

  • 他显然想要把钥匙颠倒过来(但可能是个错误......)。编辑:请注意,我并没有否决答案!
  • 返回对象的key必须是原数组元素的值
  • @ИлияПолторацкий,现在应该这样做了。
  • 但是为什么这么复杂呢?因为你能?看看我的答案,了解一些简单易读的内容
【解决方案2】:

使用forEach循环

var array = [ 
   { k1:'v1' },
   { k2:'v2' },
   { k3:'v3' }
]

function a()
{
var obj={};
array.forEach((e)=>obj[e[Object.keys(e)[0]]]=Object.keys(e)[0])
console.log(obj)
}
a();

【讨论】:

  • 你能解释一下这段代码吗? @AshayMandwarya
  • forEach 循环用于逐个遍历数组。每次迭代的 e 代表数组中的对象。 Object.keys(e)[0] 这给了我们一个包含对象 e 的所有键的数组。只有一个,所以我们使用 [0] 来获取该密钥。我们使用 e[key] 访问与该键对应的值,我们从上面的Object.keys(e)[0] 获取键,访问 this 为我们提供了与该键对应的值。现在我们有了值,在空对象 obj 中,我们再次使用 [] obj[key] 将其作为键,并且此键被赋予 Object.keys(e)[0] 的值,即键本身
  • 从而交换键和值。希望你能理解
  • 你这么多@AshayMandwarya
【解决方案3】:

您可以使用Object.entries().reduce() 方法来获得所需的输出:

const array = [ 
   { k1:'v1' },
   { k2:'v2' },
   { k3:'v3' }
];

const obj = Object.entries(
    array.reduce((r, c) => Object.assign(r, c), {})
).reduce((r, [k, v]) => (r[v] = k, r), {});

console.log(obj);

【讨论】:

    【解决方案4】:

    Array.reduce 并在每个数组元素上使用Object.keys

    var array = [ 
       { k1: 'v1' },
       { k2: 'v2' },
       { k3: 'v3' }
    ]
    
    var obj = array.reduce((obj, item) => {
      Object.keys(item).forEach(key => obj[item[key]] = key)
       
      return obj
    }, {})
    
    console.log(obj)

    【讨论】:

    • 你的意思是使用forEach?
    • 我们之前有过这样的对话。我不喜欢你的做法。我喜欢一次性完成我的转换。
    • 这不是侮辱。我真的认为您对副作用的含义感到困惑。
    • 对不起,但我仍然认为您对副作用的含义感到困惑。您的示例在其本地环境之外修改了一个变量,这正是副作用的定义。我也不同意noobs do not need clever。他们可以点击我给他们的链接并了解reduce,这也是我了解它的方式。
    • 好吧,让我们同意不同意,我不同意你的所有观点。
    【解决方案5】:

    还有一个:

     const result = {};
    
     for(const [[key, value]] of array.map(Object.entries))
       result[value] = key;
    

    【讨论】:

      【解决方案6】:

      我不知道为什么其他答案会通过箍来尽可能聪明。

      我觉得这更具可读性。我没有使用 reduce,因为我发现这个词具有误导性。一个简单的 forEach 对我来说更有意义

      const array = [ 
         { k1:'v1' },
         { k2:'v2' },
         { k3:'v3' }
      ];
      let newObj={};
      
      array.forEach((obj) => { 
        let key = Object.keys(obj)[0];
        newObj[obj[key]]=key;
      })  
      console.log(newObj)

      【讨论】:

        【解决方案7】:

        你的答案..

        var array = [
          { k1: v1 },
          { k2: v2 },
          { k3: v3 }
        ];
        
        function arrayToObject(array) {
          obj = {};
          for (i = 0; i < array.length; i++) {
            o = array[i];
            key = Object.keys(o)[0];
            obj.key = o.key;
          }
          return obj;
        }
        
        
        console.log(arrayToObject(array))

        【讨论】:

        • 您的代码无法运行 - 当错误被修复后,它不会产生正确的结果。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-29
        • 2020-06-08
        • 1970-01-01
        • 2021-02-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多