【问题标题】:NODE.JS: iterating over an array of objects, creating a new key if it does not existNODE.JS:遍历对象数组,如果不存在则创建一个新键
【发布时间】:2019-12-18 21:25:54
【问题描述】:

我正在迭代一个数据集合,在我的例子中是一个对象数组。以下是其中 2 个数据点的样本:

 {
violation_id: '211315',
inspection_id: '268804',
violation_category: 'Garbage and Refuse',
violation_date: '2012-03-22 0:00',
violation_date_closed: '',
violation_type: 'Refuse Accumulation' },

{
violation_id: '214351',
inspection_id: '273183',
violation_category: 'Building Conditions',
violation_date: '2012-05-01 0:00',
violation_date_closed: '2012-04-17 0:00',
violation_type: 'Mold or Mildew' }

我需要从中创建一个新的对象数组,每个“violation_category”属性一个。如果我正在创建的新数组中已经存在违规类别,我只需将信息添加到该现有类别对象(例如,我不会有两个“建筑条件”对象,而是添加到现有的一个)。

但是,如果当前对象存在,我无法分配给现有对象(很容易检查它是否不存在,但反之则不然)。这是目前正在尝试做的事情:

    if (violationCategory.uniqueCategoryName) {
  violationCategory.uniqueCategoryName.violations = results[i].violation_id;
  violationCategory.uniqueCategoryName.date = results[i].violation_date;
  violationCategory.uniqueCategoryName.closed =
    results[i].violation_date_closed;
} else {
  category.violations = results[i].violation_id;
  category.date = results[i].violation_date;
  category.closed = results[i].violation_date_closed;
  violationCategory.push(category);
}

在第一个条件下,如果这个类别(键)存在,我只需添加它,在第二个条件下,这就是我苦苦挣扎的地方。任何帮助表示赞赏。谢谢大家。

【问题讨论】:

  • 您是否希望按违规类别分组?

标签: node.js object javascript-objects


【解决方案1】:

如果没有对象,只需在键中添加一个空对象:

violationCategory.uniqueCategoryName = violationCategory.uniqueCategoryName || {};

然后,将您想要的数据添加到对象中。

   violationCategory.uniqueCategoryName.violations = results[i].violation_id;
   violationCategory.uniqueCategoryName.date = results[i].violation_date;
   violationCategory.uniqueCategoryName.closed =
   results[i].violation_date_closed;

不需要条件。

祝你好运!

【讨论】:

  • 谢谢哥们,如果我希望“类别名称”作为对象中的一个键存在,它本身持有一个带有日期、id 和关闭值的对象......你知道如何我能做到吗?
  • @TomK 我不知道你在问什么。你想让 uniqueCategoryName 成为一个变量吗?如果是这样,您可以使用如下变量访问对象:violationCategory[uniqueCategoryName].whatEverSubKeyYouWant = 'value';
  • 没关系,我想通了 =)
【解决方案2】:

假设您有一个输入变量,它是一个对象数组,其中的对象看起来像问题的对象,您可以生成如下输出:

var output = {};
for (var item of input) {
    if (!output[item.violation_category]) output[item.violation_category] = [];
    output[item.violation_category].push(item);
}

当然,你可以随意定制它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 2020-11-15
    • 1970-01-01
    • 2023-03-16
    • 2011-03-10
    相关资源
    最近更新 更多