Как я могу создать массив объектов с записями объектов? - PullRequest
0 голосов
/ 06 июня 2019

Я хочу создать массив объектов из 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>
  }

}

enter image description here

Консольный вывод:

e

Ответы [ 2 ]

4 голосов
/ 06 июня 2019

хорошо, так что если вам нужен массив объектов, каждый из которых представляет одну пару ключ / значение вашего исходного объекта, это подойдет вам:

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

, что неверно, поскольку записи - это список пар (массивы длины два, первый элемент - ключ, второй элемент - значение), которые при сопоставлении перейдут к параметру _key и, следовательно, ваш параметр _value будет просто индексом этой пары ключ-значение в массиве записей. то есть вы получите:

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

вместо этого вы должны написать это так:

Object.entries(obj).map(([_key, _value]) => ...);
1 голос
/ 06 июня 2019

Вы должны составить объект следующим образом:

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