【问题标题】:Get key name of a javascript object in an array of objects获取对象数组中 javascript 对象的键名
【发布时间】:2021-06-30 08:33:16
【问题描述】:

我有一些条目,这些条目分配有一个类别,每个条目都有一个数值

{
   category: "cat1",
   value: -100
}

这是我的条目^。我运行 Loadash GroupBy 来对所有类别进行分组。

const groups = _.groupBy(dataSource, (entry) => entry.category);

这个 sn-p 在这里返回如下:

{
    "cat1": [
        {
            category: "cat1",
            value: -100
        },
        {
            category: "cat1",
            value: +10
        },  
    ],
    "cat2": [
        {
             category: "cat2",
             value: -100
        },
        {
             category: "cat2",
             value: +40
        },
        //and so on...
}

键是类别名称。对象是相关条目。

我需要运行一个带有嵌入式 Reduce 的连续 Map,以通过每个条目的值的总和将数组减少为整数。

const categoryValues = _.map(groups, (element) => {
    return {
        categoryName: ???????, 
        //*I DONT KNOW WHAT GOES HERE ^, 
        //I NEED THE NAME OF THE CATEGORY TO BE HERE*
        categoryValue: _.reduce(element,(acc, el) => el.value,0),
    };
});

那是因为我的图形 api 需要他的数据集数组由像这样的对象组成:

{
   "categoryName": "cat1", //*THIS IS MISSING*
   "categoryValue": 999
}

如何访问每个数组的键名?我需要知道类别是如何命名的,以便图表显示其名称。

问号的地方需要写什么?

【问题讨论】:

  • 尝试使用 JSON.stringify(data, null, "\t") 并粘贴生成的对象,而不是提供 DevTools 的屏幕截图
  • 试试const categoryValues = _.map(groups, (element, name) => { return { categoryName: name, //I DONT KNOW WHAT GOES HERE, I NEED THE NAME OF THE CATEGORY TO BE HERE* categoryValue: _.reduce(element, (acc, el) => el.value, 0), }; });
  • 将第二个参数也作为name。它包含属性的名称
  • _.map(groups, (element, name)
  • 对象的静态方法。使用Object.entries(groups).map(([categoryName, categoryValues]) => { ... }) 调用它。

标签: javascript dictionary object lodash javascript-objects


【解决方案1】:

// this is the simple way.

var arr = {
  iamkeysA : [1,2,3],
  iamkeysB : [4,5,6]
}

var keys_ = Object.keys(arr); // now you get the list of keys name.

console.log( keys_[0] );
console.log( keys_[1] );

【讨论】:

    【解决方案2】:

    map 的文档说:

    通过运行集合中的每个元素来创建一个值数组 迭代者。使用三个参数调用迭代对象:(值, 索引|键,集合)。

    如您所见,传递给迭代对象的第二个参数是集合中的原始键。因此,只需向 iteratee 添加另一个参数并使用它:

    const categoryValues = _.map(groups, (element, name) => {
        return {
            categoryName: name,
            categoryValue: _.reduce(element,(acc, el) => el.value,0),
        };
    });
    

    【讨论】:

      【解决方案3】:

      您可以从回调函数的第二个参数中获取类别的名称。此回调函数由 lodash 库调用,当它调用 map 函数时,有 3 个参数(值、键、集合)。 map

      const categoryValues = _.map(groups, (element, name) => {
        return {
          categoryName: name, //I DONT KNOW WHAT GOES HERE, I NEED THE NAME OF THE CATEGORY TO BE HERE*
          categoryValue: _.reduce(element, (acc, el) => el.value, 0),
        };
      });

      【讨论】:

      • 这行得通。你能解释一下为什么会这样吗?
      • 如何识别为元素的名称?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-04
      相关资源
      最近更新 更多