【问题标题】:How can i create an array of objects with the object entries?如何使用对象条目创建对象数组?
【发布时间】:2019-06-06 13:38:24
【问题描述】:

我想从 this.props.data 创建一个对象数组,试图这样做我无法让地图放置通常由 object.entries 生成的键值。

我有一个带有代码的屏幕截图,以及一些控制台日志和它们显示的结果,而不是 {_key:"0"},我希望它是 {numberOfElements:"12"}。 谢谢。

这是代码有问题的部分

import React, { Component } from 'react';
export default class DataTable extends Component{
  render(){
    const data= Object.entries(this.props.data).map((_key,_value)=>({
      _key:String(_value)
    }));
    console.log(data)
    console.log(Object.entried(this.props.data))
    return <div></div>
  }

}

控制台输出:

【问题讨论】:

  • .map((_key, _value) =&gt; ( { [_key]: _value } )) 应该可以解决问题

标签: javascript reactjs react-table


【解决方案1】:

好的,如果你想要一个对象数组,每个对象代表你原始对象的一个​​键/值对,这将为你解决问题:

original = {
 x : 2,
 y : 3,
}

mapped = Object.entries(original).map(([_key, _value]) => ({[_key]: String(_value)}));

console.log(mapped);

如果您需要一个具有相同键/值但映射了值的新对象(例如通过String()),那么这应该适合您:

original = {
  x: 2,
  y: 3,
};

mapped = Object.entries(original)
         .reduce((obj, [_key, _value]) => 
           Object.assign(obj, { [_key]: String(_value) }),
           {});

console.log(mapped);

如果您需要映射对象但在数组中,那么,将其放入数组中:

original = {
  x: 2,
  y: 3,
}

mappedInArray = [
  Object.entries(original).reduce((obj, [_key, _value]) => 
    Object.assign(obj, { [_key]: String(_value) }), {})];

console.log(mappedInArray);

一般来说,请注意您正在这样做:

Object.entries(obj).map((_key, _value) => ...);

这是错误的,因为 entries 是一个对列表(长度为 2 的数组,第一项是键,第二项是值),映射时将转到您的 _key 参数,因此您的 _value 参数将只是条目数组中该键值对的索引。即你会得到:

_key = [<first-key>, <first-value>]; _value = 0;
_key = [<second-key>, <second-value>]; _value = 1;
...

你应该这样写:

Object.entries(obj).map(([_key, _value]) => ...);

【讨论】:

  • 我在jsfiddle.net/exprd5o7/2 上试过这个,但它似乎不起作用
  • @tahtoh 这是因为在您的小提琴中,您将一组对象输入函数,而不是对象。 this fiddle 是您的小提琴的更正版本,您也可以运行嵌入在答案本身中的 sn-p。
  • 是的,它确实像你说的那样工作,但它生成它就像 0: {numberofElements: "14"} 1: {test: "5"} 而不是 0: {numberofElements: "14",test : "5"}
  • 因为我的输入需要是对象数组@Eugene
  • @tahtoh 我仍然不能 100% 确定您需要什么,但我更新了答案,我怀疑它涵盖了您现在正在寻找的内容。
【解决方案2】:

你应该像这样组成一个对象:

let object = {}; object[_key] = String(_value); return object;

【讨论】:

  • 更简单的方法是return { [_key]: String(_value) }。不知道为什么使用String(...)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-14
  • 2021-08-02
相关资源
最近更新 更多