【问题标题】:Grouping two arrays (special condition)- Javascript [duplicate]对两个数组进行分组(特殊条件)- Javascript [重复]
【发布时间】:2020-07-09 17:02:23
【问题描述】:

我需要对两个数组进行分组,如果第二个数组没有代码然后设置''(其他问题和答案,不显示如何这样做)。

第一个数组:

[
  { code: "1", description: "one", activity: "5" },
  { code: "2", description: "two", activity: "30" },
  { code: "3", description: "tree", activity: "898499949" },
  { code: "4", description: "four", activity: "65465" },
  { code: "5", description: "five", activity: "123" },
  { code: "6", description: "six", activity: "111" },
]

第二个数组:

[
  { code: "1", value: 500 },
  { code: "1", value: 300 },
  { code: "2", value: 20 },
  { code: "3", value: 1950 },
  { code: "6", value: 69990 },
  { code: "6", value: 2330 },
  { code: "6", value: 6120 },
  { code: "6", value: 2 },
]

我需要在第一个数组中设置值,如果第一个和第二个数组中的代码相等,则第二个数组没有代码然后设置'':

[
  { code: "1", description: "one", activity: "5", value: 500 },
  { code: "2", description: "two", activity: "30", value: 20 },
  { code: "3", description: "tree", activity: "898499949", value: 1950 },
  { code: "4", description: "four", activity: "65465", value: "" },
  { code: "5", description: "five", activity: "123", value: "" },
  { code: "6", description: "six", activity: "111", value: "69990" },
]

预期的新结果:

[
  { code: "1", description: "one", activity: "5", value: 500 },
  { code: "1", description: "one", activity: "5", value: 300},
  { code: "2", description: "two", activity: "30", value: 20 },
  { code: "3", description: "tree", activity: "898499949", value: 1950 },
  { code: "6", description: "six", activity: "111", value: "69990" },
  { code: "6", description: "six", activity: "111", value: "2330 " },
  { code: "6", description: "six", activity: "111", value: "6120 " },
  { code: "6", description: "six", activity: "111", value: "2" },
]

【问题讨论】:

  • 这能回答你的问题吗? JavaScript merging objects by id
  • @SebastiánPuchet 不,我需要在“value”中插入一个空值,以防第二个数组中没有值。
  • 来吧兄弟,你只需要修改算法..._.map(a1, function(item){ return _.extend(item, _.find(a2, { code: item.code }) || { value: '' }); });

标签: javascript node.js


【解决方案1】:

您可以将Map 用于第二个数组并映射第一个数组并传播映射的对象或默认值。

const 
    first = [{ code: '1', description: 'one', activity: '5' }, { code: '2', description: 'two', activity: '30' }, { code: '3', description: 'tree', activity: '898499949' }, { code: '4', description: 'four', activity: '65465' }, { code: '5', description: 'five', activity: '123' }, { code: '6', description: 'six', activity: '111' }],
    second = [{ code: '1', value: 500 }, { code: '2', value: 20 }, { code: '3', value: 1950 }, { code: '6', value: 69990 }],
    key = 'code',
    result = first.map(
        (m => o => ({ ...o, ...(m.get(o[key]) || { value: '' }) }))
        (new Map(second.map(o => [o[key], o])))
    );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

第二个。

const 
    first = [{ code: "1", description: "one", activity: "5" }, { code: "2", description: "two", activity: "30" }, { code: "3", description: "tree", activity: "898499949" }, { code: "4", description: "four", activity: "65465" }, { code: "5", description: "five", activity: "123" }, { code: "6", description: "six", activity: "111" }],
     second = [{ code: "1", value: 500 }, { code: "1", value: 300 }, { code: "2", value: 20 }, { code: "3", value: 1950 }, { code: "6", value: 69990 }, { code: "6", value: 2330 }, { code: "6", value: 6120 }, { code: "6", value: 2 }],
    key = 'code',
    result = second.map(
        (m => o => ({ ...m.get(o[key]), ...o }))
        (new Map(first.map(o => [o[key], o])))
    );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 如果值为空,如何不将此行导入数组3?
  • 你有例子吗?也许你可以问一个新问题?
  • 我更新了“预期的新结果:”中的问题,如果数组二没有“代码”,那么这些没有代码的行不应该出现。
  • 如果我再提出一个问题,他们会再次拒绝我...
  • 您的订单好像颠倒了。
猜你喜欢
  • 2014-12-18
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多