【问题标题】:how can i increment variable according of number of proprety object如何根据属性对象的数量增加变量
【发布时间】:2021-11-24 20:23:42
【问题描述】:

我有一个部门列表,我试图计算每个部门存在多少个部门,并增加一个变量(例如i),这样我就可以在循环外调用它并将其作为每个部门的标签。

我是从这个开始的,但它不起作用:

import publicationTotal from "../data/agora-export-publicationtotal-20210803164942.json";

let stringified, myObj, subkeys;
stringified = JSON.stringify(publicationTotal);
myObj = JSON.parse(stringified);
subkeys = Object.keys(myObj[0]);

let departement= {};
let star = [];
for (let x in myObj) {
  if (Object.prototype.hasOwnProperty.call(myObj, x)) {
    for (let y in subkeys) {
      if (Object.prototype.hasOwnProperty.call(subkeys, y)) {
        if (subkeys[y] === "Departement") {
          //  star = myObj[x][subkeys[y]] + 1;
            star = departement[ myObj[x][subkeys[y]] ] = departement[ myObj[x][subkeys[y]] ] + 1;
          console.log("dept : ", star);
           
        }
      }
    }

  }
}

publicationTotal 文件包含此类信息:

[
  {
    "num_dep": "AI",
    "dep_name": "Ain",
    "region_name": "Auvergne-Rhône-Alpes",
    "total_parrainages": 0,
    "color_dpt": ""
  },
  {
    "num_dep": "AI",
    "dep_name": "Ain",
    "region_name": "Hauts-de-France",
    "total_parrainages": 0,
    "color_dpt": ""
  },
  {
    "num_dep": "AM",
    "dep_name": "Alpes-Maritimes",
    "region_name": "Auvergne-Rhône-Alpes",
    "total_parrainages": 0,
    "color_dpt": ""
  },
  {
    "num_dep": "AM",
    "dep_name": "Alpes-Maritimes",
    "region_name": "Provence-Alpes-Côte d'Azur",
    "total_parrainages": 0,
    "color_dpt": ""
  },
  {
    "num_dep": "AM",
    "dep_name": "Alpes-Maritimes",
    "region_name": "Provence-Alpes-Côte d'Azur",
    "total_parrainages": 0,
    "color_dpt": ""
  },
  {
    "num_dep": "AM",
    "dep_name": "Alpes-Maritimes",
    "region_name": "Provence-Alpes-Côte d'Azur",
    "total_parrainages": 0,
    "color_dpt": ""
  },
  {
    "num_dep": "AG",
    "dep_name": "Ariège",
    "region_name": "Auvergne-Rhône-Alpes",
    "total_parrainages": 0,
    "color_dpt": ""
  },
  {
    "num_dep": "AG",
    "dep_name": "Ariège",
    "region_name": "Grand Est",
    "total_parrainages": 0,
    "color_dpt": ""
  },
  {
    "num_dep": "AG",
    "dep_name": "Ariège",
    "region_name": "Occitanie",
    "total_parrainages": 0,
    "color_dpt": ""
  },
  {
    "num_dep": "AB",
    "dep_name": "Aube",
    "region_name": "Grand Est",
    "total_parrainages": 0,
    "color_dpt": ""
  },
  {
    "num_dep": "AD",
    "dep_name": "Aude",
    "region_name": "Occitanie",
    "total_parrainages": 0,
    "color_dpt": ""
  }
]

例如,i 变量将有 4 个用于“Yonne”部门,3 个用于“Val-de-Marne”部门。

预期结果是将部门名称和号码分开,这样我就可以在我想要的地方打电话给他们

【问题讨论】:

  • 在您的问题中分享预期结果。
  • 预期输出是多少?
  • @navnath, NItheesh 我更新了我的帖子
  • @MeryemACHEMLAL 那是一个对象还是一个数组。此处添加的两个答案将输出显示为对象。您期望的答案会有什么变化?
  • 我只需要保留我在帖子中发布的示例,并将部门名称和编号分开,如果可能的话,我的意思是两个变量

标签: javascript arrays for-loop object


【解决方案1】:

const publicationTotal=[{Departement:"Yonne"},{Departement:"Yonne"},{Departement:"Yonne"},{Departement:"Yonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Seine-Saint-Denis"},{Departement:"Seine-Saint-Denis"},{Departement:"Seine-Saint-Denis"},{Departement:"Seine-Saint-Denis"},{Departement:"Val-de-Marne"},{Departement:"Val-de-Marne"},{Departement:"Val-de-Marne"},{Departement:"Val-d'Oise"}];

let results = {};

publicationTotal.forEach(({
  Departement
}) => {
  if (results[Departement] === undefined) {
    results[Departement] = 0
  } else {
    results[Departement] = results[Departement] + 1
  }
})

console.log(results)

【讨论】:

  • 谢谢@ksav 的评论:),我怎样才能分别得到部门名称和号码,因为结果我有这个:Yonne: 62
  • 我不知道你说的get the name and number separately是什么意思...
【解决方案2】:

如果部门已经退出?得到它并增加 1 否则设置 1

const departments = [{"Departement":"Yonne"},{"Departement":"Yonne"},{"Departement":"Yonne"},{"Departement":"Yonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Seine-Saint-Denis"},{"Departement":"Seine-Saint-Denis"},{"Departement":"Seine-Saint-Denis"},{"Departement":"Seine-Saint-Denis"},{"Departement":"Val-de-Marne"},{"Departement":"Val-de-Marne"},{"Departement":"Val-de-Marne"},{"Departement":"Val-d\u0027Oise"}];

const result = departments.reduce((acc, item) => (
  acc[item['Departement']] =acc[item['Departement']]
  ?
  acc[item['Departement']] + 1
  :
  1,
  acc),{}
);

console.log(result);

// to get only department names
console.log("departments: ", Object.keys(result));

// to get only no of depatment
console.log("department values: ", Object.values(result));

【讨论】:

  • 谢谢,我认为你的结果有错误,不是吗?
  • 这是什么?我不这么认为
  • 最后一个控制台日志报错,和第二个有什么区别? Uncaught TypeError: Object.Keys is not a function
  • 我确实在那里输入错误,最后一个控制台只会为您提供所有部门的计数数组,如果您想从result 获取结果,只需执行result[deparymentName],它会给您计数。我不明白你在不同的变量中是什么意思,result 足以做任何操作。
【解决方案3】:

Array.reduce 以名称为键,计数为值

const publicationTotal  = [{Departement:"Yonne"},{Departement:"Yonne"},{Departement:"Yonne"},{Departement:"Yonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Seine-Saint-Denis"},{Departement:"Seine-Saint-Denis"},{Departement:"Seine-Saint-Denis"},{Departement:"Seine-Saint-Denis"},{Departement:"Val-de-Marne"},{Departement:"Val-de-Marne"},{Departement:"Val-de-Marne"},{Departement:"Val-d'Oise"}];
const output = publicationTotal.reduce((acc, curr) => {
  acc[curr.Departement] ? acc[curr.Departement]++ : acc[curr.Departement] = 1;
  return acc;
}, {});
console.log(output);

【讨论】:

  • 当我们有一个包含 2000 个部门或每个部门以上的文件时,您不觉得这很重吗?
  • @MeryemACHEMLAL 无论如何你必须执行一个循环来分离结果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 2022-11-21
  • 2017-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多